如何使用Pandas重塑Dataframe实现年份横向、Ex及ID纵向保留
解决方法
你的需求属于典型的长宽表转换场景,先把Ex1、Ex2两个指标列转为纵向,再把年份作为列名展开即可,用pandas的melt+pivot组合就能实现,不需要用transpose(transpose是全表转置,不适合这种分字段转换的场景)。
完整代码如下:
import pandas as pd # 构造原始DataFrame,你实际使用时替换成读取你自己的数据的代码即可 df = pd.DataFrame({ 'ID': [1,1,1,2,2,2,3,3,3,3], 'Year': [2021,2022,2023,2024,2025,2021,2022,2023,2024,2025], 'Ex1': [315,233,566,754,334,543,678,65,456,53], 'Ex2': [35,23,5766,7554,3334,5443,6728,645,4556,563] }) # 第一步:将Ex1、Ex2列转为纵向行 df_melt = df.melt( id_vars=['ID', 'Year'], # 保持ID、Year列不动 value_vars=['Ex1', 'Ex2'], # 要转成纵向的列 var_name='Ex', # 转后的指标列名 value_name='Value' # 转后的数值列名 ) # 第二步:将Year字段转为横向列 result = df_melt.pivot( index=['ID', 'Ex'], # 作为行索引的字段 columns='Year', # 要转成列的字段 values='Value' # 填充到单元格的数值字段 ).reset_index().fillna('') # 重置索引,空值填充为空字符串,和你预期的展示效果一致 print(result)
运行上述代码得到的结果和你给出的预期格式完全一致。
内容的提问来源于stack exchange,提问作者Sotomayor1989
相关产品推荐
相关产品推荐

