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

如何重塑DataFrame以生成适配堆叠柱状图的宽格式结构?

解决方法

要实现将长格式DataFrame转换为按日期聚合的宽格式,用Pandas的透视表功能就能轻松搞定,步骤如下:

1. 准备示例数据(可替换为你的实际数据)

import pandas as pd

data = {
    'date': ['2021-03-01', '2021-03-01', '2021-04-01', '2021-04-01', '2021-05-01'],
    'product': ['A', 'B', 'A', 'B', 'C'],
    'quantity': [55, 43, 55, 46, 10]
}
df = pd.DataFrame(data)

2. 核心转换步骤

第一步:生成透视表,按日期聚合产品数量

用pivot_table将日期作为行、产品作为列,聚合数量值,缺失的产品数量自动填充为0:

# 透视表聚合,sum用于处理同一日期同一产品的多条数据
pivot_df = df.pivot_table(
    index='date',
    columns='product',
    values='quantity',
    aggfunc='sum'
).fillna(0)

第二步:重命名列名,添加quantity_前缀

为了匹配你想要的列名格式,给每个产品列加上前缀:

pivot_df.columns = [f'quantity_{col}' for col in pivot_df.columns]

第三步:将日期从索引转为普通列(可选)

如果不需要日期作为索引,重置索引即可:

pivot_df = pivot_df.reset_index()

3. 补充:添加product列(匹配你的示例结构)

你的目标结构里保留了product列,假设每个日期取第一个出现的产品,可以通过分组提取后合并:

# 提取每个日期的第一个产品
product_info = df.groupby('date')['product'].first().reset_index()

# 合并到透视表结果
final_df = pd.merge(pivot_df, product_info, on='date')

# 调整列顺序,把product放到date后面
cols = ['date', 'product'] + [col for col in final_df.columns if col not in ['date', 'product']]
final_df = final_df[cols]

最终得到的final_df结构和你要求的完全一致:

date product  quantity_A  quantity_B  quantity_C
0  2021-03-01       A        55.0        43.0         0.0
1  2021-04-01       A        55.0        46.0         0.0
2  2021-05-01       C         0.0         0.0        10.0

内容的提问来源于stack exchange,提问作者titu84hh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:47:19