如何在pandas中创建数据透视表,将行值转列并按日期拆分独立行
这是典型的长表转宽表操作,你需要的分组逻辑可以直接通过pivot_table的index参数指定,无需额外做分组处理:
实现代码
import pandas as pd # 方法1:通用pivot_table实现(兼容存在重复行的场景) res = df.pivot_table( # index指定需要保留的公共维度,相同取值的行会合并为一条 index=["id", "name", "date"], columns="measure", # 要转为列名的列 values="result", # 新列的取值来源列 aggfunc="first" # 同维度下重复值的聚合规则,这里取第一条即可 ).reset_index() # 将index中的公共维度还原为普通列 # 可选:将默认填充的NaN替换为示例中的None res = res.where(res.notna(), None)
如果你的原始数据不存在id+name+date+measure四列重复的情况,也可以用更简洁的pivot方法实现:
# 方法2:无重复数据场景的简化写法 res = df.pivot( index=["id", "name", "date"], columns="measure", values="result" ).reset_index().where(res.notna(), None)
参数说明
你提到的不同年份的分组逻辑已经被index参数中的date列覆盖,工具会自动将相同id+name+date的行合并,不同日期的行单独保留,最终输出格式和你期望的结果完全匹配。
内容的提问来源于stack exchange,提问作者aj3409
相关产品推荐
相关产品推荐

