结合索引和列并保持价值

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