如何将Pandas DataFrame按C列关联的多列转换为指定宽表格式
解决方案
你要实现的是典型的长表转宽表需求,直接用Pandas内置的pivot方法即可实现,该方法底层做了性能优化,可适配大批量数据场景,具体实现代码如下:
import pandas as pd # 你的原始DataFrame构建代码 df1 = pd.DataFrame({'A':[1,1,1], 'B':[2,2,2], 'C':['1y', '3y', '7y'], 'D':[111,222,333], 'E':[-111,-222,-333]}) # 核心转换逻辑 # index参数放所有不需要展开的公共列,values参数放所有要按C列拆分的数值列 pivoted = df1.pivot(index=['A', 'B'], columns='C', values=['D', 'E']) # 合并多层列名为你需要的「列名_后缀」格式 pivoted.columns = [f"{col}_{suffix}" for col, suffix in pivoted.columns] # 把公共列从索引恢复为普通列 df2 = pivoted.reset_index() print(df2)
兼容场景说明
如果你的数据存在相同A+B+C组合的重复行,直接用pivot会报错,可以替换为pivot_table方法,指定重复值的聚合规则即可:
# aggfunc可根据业务需求替换为sum、mean等聚合函数 pivoted = df1.pivot_table(index=['A', 'B'], columns='C', values=['D', 'E'], aggfunc='first') # 后续列名合并、重置索引逻辑和上述方案完全一致
内容的提问来源于stack exchange,提问作者user2696565
相关产品推荐
相关产品推荐

