Pandas执行assign、groupby聚合后如何保留ID列方便数据合并
核心原因
经过groupby聚合、unstack转宽表操作后,原本作为分组键的MotherID、PregnancyID会从DataFrame普通列转为行级多层索引。pandas导出CSV、识别列结构时,只会将普通实体列纳入处理范围,行索引字段默认不会被包含在内,因此会出现ID列丢失的情况。
解决方式
无需调整前期分组、聚合、宽表转换的逻辑,仅需在整个处理流程末尾追加.reset_index()。该操作会将行级多层索引中的MotherID、PregnancyID全部还原为正式实体列,不影响已计算完成的各妊娠阶段测量值结果。
修正后的完整代码
result_df = ( df.assign(tm = (df['gestationalAgeInWeeks'] + 13 - 1 ) // 13) .drop(columns = 'gestationalAgeInWeeks') .groupby(['MotherID', 'PregnancyID','tm']) .agg('max') .unstack() .reset_index() # 新增该行实现ID列还原 )
可选列名简化
上述代码执行完成后,测量值列会呈现为多层元组结构(如('abdomCirc', 1)),如果该结构影响后续多表合并操作,可追加以下代码简化列名:
# 将元组列名转换为可读性更高的格式,例如 abdomCirc_tm1、abdomCirc_tm2 result_df.columns = [ f"{col[0]}_tm{col[1]}" if isinstance(col, tuple) else col for col in result_df.columns ]
处理效果
- 调用
result_df.info()时,MotherID、PregnancyID会被识别为DataFrame的正式列 - 执行
result_df.to_csv("output.csv", index=False)导出文件时,两个ID字段会正常写入CSV首列位置,不会出现丢失
内容的提问来源于stack exchange,提问作者sums22
相关产品推荐
相关产品推荐

