结合索引和列并保持价值
Combine index and columns and keep value
我有一个 DataFrame 如下
A B C
1 1 2 3
2 4 2 5
而且我想将索引和列组合成一个新索引,同时保留前一列 + 索引的值,如下所示
Value
1A 1
1B 2
1C 3
2A 4
2B 2
2C 5
我知道我可以用 df.iterrows()
遍历它并从中创建一个新的 DataFrame,但我正在处理一个巨大的数据集,它的效率太低了。数据集是数千万个观察值。
使用 DataFrame.stack
和列表理解:
df = df.stack().to_frame('Value')
df.index = [f'{a}{b}' for a, b in df.index]
print (df)
Value
1A 1
1B 2
1C 3
2A 4
2B 2
2C 5
或者使用 numpy 解决方案 ravel
:
c = np.tile(df.columns, len(df))
i = np.repeat(df.index, len(df.columns))
df = pd.DataFrame({'value': df.to_numpy().ravel()}, index=[f'{a}{b}' for a, b in zip(i, c)])
print (df)
value
1A 1
1B 2
1C 3
2A 4
2B 2
2C 5
我有一个 DataFrame 如下
A B C
1 1 2 3
2 4 2 5
而且我想将索引和列组合成一个新索引,同时保留前一列 + 索引的值,如下所示
Value
1A 1
1B 2
1C 3
2A 4
2B 2
2C 5
我知道我可以用 df.iterrows()
遍历它并从中创建一个新的 DataFrame,但我正在处理一个巨大的数据集,它的效率太低了。数据集是数千万个观察值。
使用 DataFrame.stack
和列表理解:
df = df.stack().to_frame('Value')
df.index = [f'{a}{b}' for a, b in df.index]
print (df)
Value
1A 1
1B 2
1C 3
2A 4
2B 2
2C 5
或者使用 numpy 解决方案 ravel
:
c = np.tile(df.columns, len(df))
i = np.repeat(df.index, len(df.columns))
df = pd.DataFrame({'value': df.to_numpy().ravel()}, index=[f'{a}{b}' for a, b in zip(i, c)])
print (df)
value
1A 1
1B 2
1C 3
2A 4
2B 2
2C 5