You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含重复日期的多产品DataFrame转换为产品作为数据列的结构

如何将含重复日期的多产品DataFrame转换为产品作为数据列的结构

嗨,这个需求其实用Pandas的内置函数就能轻松搞定,完全不用你想的那种手动逐个产品筛选再合并的繁琐操作——这才是最高效的方式!

核心解决方案:用pivot快速转换

你的原始数据里,每个「日期+产品」的组合都是唯一的(看示例里没有重复项),这种情况用pivot函数一行代码就能完成转换,完美匹配你的需求。

先给你完整的可复现代码,你可以直接套用到自己的DataFrame上:

import pandas as pd

# 先构造和你示例一致的原始DataFrame(你自己的代码里可以跳过这步,直接用你的原始df)
data = {
    'Date': ['1/1/25', '2/1/25', '3/1/25', '1/1/25', '2/1/25', '3/1/25', '1/1/25', '2/1/25', '3/1/25'],
    'Data': [1,2,3,1,4,5,1,6,7],
    'Product': ['A','A','A','B','B','B','C','C','C']
}
df = pd.DataFrame(data)

# 核心转换步骤
pivoted_df = df.pivot(index='Date', columns='Product', values='Data').reset_index()

# 把列名改成你想要的「Data_A、Data_B」格式
pivoted_df.columns = ['Date'] + [f'Data_{col}' for col in pivoted_df.columns[1:]]

运行后你会得到完全符合预期的结果:

Date  Data_A  Data_B  Data_C
0   1/1/25       1       1       1
1   2/1/25       2       4       6
2   3/1/25       3       5       7

代码解释

  • pivot(index='Date', columns='Product', values='Data'):指定用Date作为行标识,Product的取值作为新列名,Data的值填充到对应的单元格里。
  • reset_index():把原来作为行索引的Date变回普通列,符合你想要的输出结构。
  • 最后一行的列名重命名:把原来的A、B、C改成Data_A、Data_B、Data_C,完全匹配你的需求。

特殊情况处理:如果有重复的「日期+产品」组合

如果你的原始数据里,同一个日期同一个产品对应多条Data记录(比如1/1/25的产品A有两个Data值),pivot会报错,这时候就用pivot_table,它可以自动聚合重复的数据:

# 比如用平均值聚合重复项,也可以换成sum、max、min等你需要的聚合方式
pivoted_df = df.pivot_table(
    index='Date', 
    columns='Product', 
    values='Data', 
    aggfunc='mean'  # 这里可以替换成你需要的聚合函数
).reset_index()
pivoted_df.columns = ['Date'] + [f'Data_{col}' for col in pivoted_df.columns[1:]]

关于你最初的想法

你说的「筛选每个产品再合并」的方法确实可行,但当产品数量很多的时候,代码会变得非常冗长——你要逐个筛选、逐个合并,还得注意合并的键和列名,很容易出错。而用pivot/pivot_table的话,不管你有10个还是100个产品,一行核心代码就能搞定,效率和可读性都高太多了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:54:30