Skip to main content
 首页 » 编程设计

python之在 Pandas 中折叠列和索引

2025年05月04日17davidwang456

我正在寻找使用 python3 对 pandas DataFrame 执行特定操作。我想将一个 NxK DataFrame 折叠成一个 NKx3 DataFrame,它由三列组成:条目,列和来自原始 DataFrame 的索引。这是一个例子:

          'a' 'b' 'c' 
    'e'    1   2   3 
    'f'    4   5   6 

期望的输出:

         0   1   2 
    0    1  'a' 'e' 
    1    4  'a' 'f' 
    2    2  'b' 'e' 
    3    5  'b' 'f' 
    4    3  'c' 'e' 
    5    6  'c' 'f' 

我正在寻找一种优雅的 pythonic 方式来实现这一目标,但由于我正在处理非常大的数据帧,因此最优先考虑的是效率。

请您参考如下方法:

Pandas

使用unstack + reset_index

df.unstack().reset_index() 
 
  level_0 level_1  0 
0       a       e  1 
1       a       f  4 
2       b       e  2 
3       b       f  5 
4       c       e  3 
5       c       f  6 

完全复制你所拥有的

df.unstack().rename_axis([1, 2]).reset_index().sort_index(1) 
 
   0  1  2 
0  1  a  e 
1  4  a  f 
2  2  b  e 
3  5  b  f 
4  3  c  e 
5  6  c  f 

numpy

v = df.values 
pd.DataFrame({ 
        0: v.ravel('F'), 
        1: df.columns.values.repeat(v.shape[0]), 
        2: np.tile(df.index.values, v.shape[1]) 
    }) 
 
   0  1  2 
0  1  a  e 
1  4  a  f 
2  2  b  e 
3  5  b  f 
4  3  c  e 
5  6  c  f