Pandas如何将M*N格式的DataFrame转换为(M*N)*1的单列DataFrame
实现方案
实现该需求有两种常用的高效方法:
方法1:使用stack方法(推荐)
这是最贴合该场景的原生方法,代码最简:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame({'A': [1, 2], 'B': [3, 4], 'C': [5, 6]}) # 转换代码 result = df.stack().swaplevel().sort_index().to_frame(name='value')
步骤说明:
df.stack():将列名转为行的内层索引,得到多级索引Series,此时索引顺序为「原行索引、原列名」swaplevel():交换两级索引的位置,变为「原列名、原行索引」的顺序sort_index():按索引排序,保证输出顺序和预期完全一致to_frame(name='value'):将Series转为单列DataFrame,列名设置为value
方法2:使用melt方法
如果你更熟悉宽表转长表的melt逻辑,也可以用该方法实现:
result = df.melt(var_name='col', ignore_index=False)\ .set_index('col', append=True)\ .swaplevel()\ .sort_index()
两种方法输出的结果完全匹配你给出的预期格式。
内容的提问来源于stack exchange,提问作者dyluns
相关产品推荐
相关产品推荐

