如何调整Pandas pivot_table语法实现行转列并合并相同索引?
解决DataFrame透视后无法合并行的问题
问题分析
你的代码未合并相同date和id的行,核心原因大概率是date或id列的数据类型不一致(比如id混合了数值与字符串、date存在格式差异),或者未正确处理透视后的索引。
可行解决方案
方案1:使用pivot方法(推荐)
由于你的数据中每个(date, id, desc)组合对应唯一的amount值,无需聚合操作,直接用pivot更高效:
import pandas as pd # 执行透视 df_pivoted = df.pivot(index=['date', 'id'], columns='desc', values='amount').reset_index() # 移除列索引的名称(避免desc作为列名前缀) df_pivoted.columns.name = None
方案2:修正pivot_table用法
如果坚持使用pivot_table,需先统一数据类型,再确保聚合逻辑正确:
import pandas as pd # 统一数据类型:date转为datetime,id转为字符串(保留前导零) df['date'] = pd.to_datetime(df['date']) df['id'] = df['id'].astype(str) # 执行透视表 df_pivoted = df.pivot_table( index=['date', 'id'], columns='desc', values='amount', aggfunc='first' # 因每个组合唯一,sum/max等聚合函数效果一致 ).reset_index() df_pivoted.columns.name = None
关键注意点
- 必须确保
date和id列的数据类型完全统一,否则分组时会将看似相同的内容判定为不同组 - 透视后记得用
reset_index()将多级索引转为普通列,同时移除列索引名称让结果符合预期格式
内容的提问来源于stack exchange,提问作者biyazelnut
相关产品推荐
相关产品推荐

