Pandas实现三列DataFrame转产品为列、日期为行的宽表方法
解决方案
Pandas提供了多个原生方法可以直接完成这种长表转宽表的操作,无需手动遍历匹配:
方法1:pivot(无重复值时优先用,最适配你的需求)
只需要一行代码即可实现目标转换:
# 假设你的原始DataFrame变量名为df transformed_df = df.pivot( index="Date", columns="Prod_name", values="Price" ).reset_index()
参数说明:
index:指定作为行索引的列,这里填日期列Datecolumns:指定要展开为新列的列,这里填产品名列Prod_namevalues:指定填充单元格的取值来源列,这里填价格列Price- 末尾的
reset_index()是为了把Date从索引还原为普通列,完全匹配你给出的目标表结构,如果你接受Date作为索引可以去掉该方法。
方法2:pivot_table(存在重复的日期+产品组合时使用)
如果原始数据里存在同一个日期对应同一个产品多条价格记录的情况,可以用pivot_table指定聚合规则处理重复值:
# 示例为重复值取第一个出现的价格,aggfunc也可以改为sum、mean等符合你需求的聚合函数 transformed_df = df.pivot_table( index="Date", columns="Prod_name", values="Price", aggfunc="first" ).reset_index()
方法3:groupby + unstack 组合实现
也可以通过分组后逆堆叠的方式实现同样效果:
transformed_df = df.groupby(["Date", "Prod_name"])["Price"].first().unstack().reset_index()
内容的提问来源于stack exchange,提问作者norewiler
相关产品推荐
相关产品推荐

