R用户学习Python时如何实现Pandas长表转宽表的多列重塑
R长表转宽表的Pandas等价实现
核心实现代码
首先定义ID列列表,支持两种方式生成:
- 手动指定(和R代码逻辑完全一致)
# 把中间的Column3到Column46按实际列名补全即可 id_cols = ['Column1', 'Column2', 'Column3', ..., 'Column46', 'Column47']
- 自动生成(适合列数较多不想手动输入的场景)
id_cols = [col for col in df_original.columns if 1 <= int(col.lstrip('Column')) <= 47]
无重复ID+分组组合场景
直接用pivot方法实现,和你提供的R代码逻辑完全等价:
df_reshaped = df_original.pivot( index=id_cols, columns='Column48', values='Column49' ).reset_index() # 可选操作:和R输出的列名格式对齐(生成Column49.Company1这类列名) df_reshaped.columns.name = None df_reshaped.columns = [col if col in id_cols else f'Column49.{col}' for col in df_reshaped.columns]
存在重复ID+分组组合场景
如果同一ID组合下存在同一个公司的多条记录,pivot会报错,改用pivot_table指定聚合规则即可:
df_reshaped = df_original.pivot_table( index=id_cols, columns='Column48', values='Column49', aggfunc='sum' # 可替换为'mean'、'first'、'max'等符合需求的聚合函数 ).reset_index() # 同样可加上述列名重命名代码对齐R输出格式
参数对应关系
你用到的R reshape参数和Pandas方法的参数对应关系如下:
- R的
idvar→ Pandas的index参数 - R的
timevar→ Pandas的columns参数 - R的
v.names→ Pandas的values参数 - R的
direction = "wide"对应Pandaspivot/pivot_table默认的长转宽逻辑
内容的提问来源于stack exchange,提问作者dfe
相关产品推荐
相关产品推荐

