Pandas DataFrame布局转换:实现列转行结构调整需求
如何将Pandas DataFrame的列转换为行结构(宽表转长表)
你需要把宽格式的DataFrame转换成长格式——也就是把column2和column3的列名转成新的行数据,同时保留column1作为分组标识。这在Pandas里是非常常见的操作,用melt或stack函数就能轻松实现,我给你具体的代码方案:
第一步:先复现你的原始DataFrame
先把你提供的数据构建成可操作的Pandas DataFrame:
import pandas as pd df = pd.DataFrame({ 'column1': ['A', 'B', 'C', 'D'], 'column2': [0.020, 0.045, 0.230, 0.130], 'column3': [0.76, 1.30, 0.32, 0.67] })
方法一:使用melt函数(最直观的方式)
melt是Pandas专门为宽表转长表设计的工具,你只需要指定哪列作为分组标识,剩下的列会自动转成行:
# 转换格式,指定分组列、原列名对应的新列名、值列名 melted_df = df.melt( id_vars='column1', # 保留作为分组依据的列 var_name='newCol', # 原列名要放到的新列名 value_name='value' # 原列值要放到的新列名 ) # 如果你想要和示例里一样的显示效果(相同column1合并显示),可以设置索引并排序 melted_df = melted_df.set_index('column1').sort_index()
执行后打印的结果和你期望的结构完全匹配:
newCol value column1 A column2 0.020 A column3 0.760 B column2 0.045 B column3 1.300 C column2 0.230 C column3 0.320 D column2 0.130 D column3 0.670
方法二:使用stack函数(适合索引操作习惯)
如果你更习惯用索引操作,stack可以把列轴的层级转成行轴,再重置索引得到目标结构:
# 先把column1设为索引,再堆叠其他列 stacked_df = df.set_index('column1').stack().reset_index(name='value') # 把自动生成的临时列名重命名为newCol stacked_df = stacked_df.rename(columns={'level_1': 'newCol'})
这个方法得到的结果和melt完全一致,只是实现路径不同,你可以根据自己的习惯选择。
补充说明
你示例里显示的Name: value, dtype: float64是Pandas打印Series时的元信息,在我们转换后的DataFrame里,value列就是float类型,和这个描述完全匹配。
内容的提问来源于stack exchange,提问作者user9160422
相关产品推荐
相关产品推荐

