Python Pandas如何将DataFrame转置为带指定列值后缀的宽表
Pandas 实现宽表转换方案
直接使用 Pandas 内置的pivot方法即可实现该需求,核心是将ID作为行索引,A列作为列后缀的来源,B和C作为值列,最后合并多层列名即可。
完整实现代码
import pandas as pd # 构造测试DataFrame,和你给出的结构一致 df = pd.DataFrame({ 'ID': [1, 1], 'A': [2001, 2002], 'B': [10, 15], 'C': [5, 6] }) # 长表转宽表 df_pivot = df.pivot(index='ID', columns='A', values=['B', 'C']) # 拼接多层列名,生成 B_2001、C_2001 格式的列名 df_pivot.columns = [f"{col[0]}_{col[1]}" for col in df_pivot.columns] # 重置索引,把ID从索引变回普通列 df_pivot = df_pivot.reset_index() # 可选:调整列顺序,让同一年份的B、C列相邻,匹配你给出的输出格式 df_pivot = df_pivot[['ID'] + sorted(df_pivot.columns.drop('ID'), key=lambda x: x.split('_')[1])] # 打印结果 print(df_pivot)
注意事项
- 如果数据中存在同一个
ID+同一个A值对应多条记录的情况,可以把pivot替换为pivot_table,额外指定aggfunc参数处理重复值的聚合逻辑,示例:
常用的聚合规则可选df_pivot = df.pivot_table(index='ID', columns='A', values=['B', 'C'], aggfunc='sum')sum求和、mean求平均、first取第一条值等。
内容的提问来源于stack exchange,提问作者kj14
相关产品推荐
相关产品推荐

