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

Pandas DataFrame按客户分组计算指定日期价格差值

解决Pandas按客户分组计算两日价格差值的问题

嘿,这就帮你搞定这个分组计算的需求!我们从原始数据入手,一步步实现你要的结果。

原始数据构造

先把你给出的DataFrame用代码构造出来:

import pandas as pd

# 构造原始数据
data = {
    'Customer': ['Jane', 'Jane', 'Joe', 'Joe'],
    'Date': ['01/01/2018', '01/02/2018', '01/01/2018', '01/02/2018'],
    'price': [10, 14, 10, 15]
}
df = pd.DataFrame(data)

方法一:透视表(Pivot)实现(推荐)

这种方法逻辑清晰,还能轻松扩展到更多日期的场景:

  1. 先把日期列转换成标准的datetime格式(可选,但能避免日期字符串排序的坑)
  2. 用透视表将日期转为列,客户作为行索引
  3. 直接计算两日价格的差值,再整理成目标格式
# 转换日期格式为datetime类型
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')

# 创建透视表:行=客户,列=日期,值=价格
pivot_df = df.pivot(index='Customer', columns='Date', values='price')

# 计算01/02/2018价格减去01/01/2018的价格,并重命名列
result = pivot_df.iloc[:, 1] - pivot_df.iloc[:, 0]
result = result.reset_index(name='price')

print(result)

运行后就能得到你想要的结果:

Customer  price
0     Jane      4
1      Joe      5

方法二:Groupby直接筛选计算

如果只针对这两个固定日期,也可以用groupby结合lambda函数直接计算:

# 按客户分组,每组内筛选对应日期的价格做差值
result = df.groupby('Customer').apply(
    lambda group: group[group['Date'] == '01/02/2018']['price'].iloc[0] - group[group['Date'] == '01/01/2018']['price'].iloc[0]
).reset_index(name='price')

print(result)

这个方法更直接贴合你的特定需求,代码逻辑也很直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:46:38