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)实现(推荐)
这种方法逻辑清晰,还能轻松扩展到更多日期的场景:
- 先把日期列转换成标准的datetime格式(可选,但能避免日期字符串排序的坑)
- 用透视表将日期转为列,客户作为行索引
- 直接计算两日价格的差值,再整理成目标格式
# 转换日期格式为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
相关产品推荐
相关产品推荐

