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

如何重塑DataFrame计算指定日期与分组下两组采购量的差值?

重塑DataFrame计算组间差值的实现方案

问题描述

现有按date-bucket-group维度拆分的DataFrame:

date       | bucket |  Group  |purchase
2020-01-01 | 1      |  A      | 12
2020-01-01 | 1      |  B      | 11

2020-01-01 | 2      |  A      | 14
2020-01-01 | 2      |  B      | 14

2020-02-01 | 1      |  A      | 11
2020-02-01 | 1      |  B      | 10

需要生成包含difference列的新DataFrame,格式如下:

date       | bucket |  purchase | difference
2020-01-01 | 1      |  12-11=1  | Group A - Group B for that day/bucket
2020-01-01 | 2      |  0        | Group A - Group B for that day/bucket
2020-02-01 | 1      |  1        | Group A - Group B for that day/bucket

实现步骤

使用Pandas可以通过以下步骤快速实现:

1. 数据透视转换

将Group列的A、B分组转为独立列,方便后续计算:

import pandas as pd

# 假设原始数据存储在df中
pivoted = df.pivot(index=['date', 'bucket'], columns='Group', values='purchase').reset_index()

如果存在date-bucket组合下缺失A/B组的情况,添加fill_value=0避免空值:

pivoted = df.pivot(index=['date', 'bucket'], columns='Group', values='purchase').fillna(0).reset_index()

2. 计算差值与格式化显示列

# 计算A组减B组的差值
pivoted['difference'] = pivoted['A'] - pivoted['B']

# 格式化purchase列:差值非0时显示"X-Y=Z",否则显示0
pivoted['purchase'] = pivoted.apply(
    lambda x: f"{x['A']}-{x['B']}={x['difference']}" if x['difference'] != 0 else '0',
    axis=1
)

3. 整理最终结构

保留所需列并调整顺序,同时统一difference列的说明文本:

final_df = pivoted[['date', 'bucket', 'purchase', 'difference']]
final_df['difference'] = 'Group A - Group B for that day/bucket'

运行上述代码后,final_df即为符合需求的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:09:46