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

如何用Pandas Shift函数高效获取客户上次购买价格(无需Join)

解决方案

你可以直接通过**分组后对price列使用shift(1)**实现需求,全程不需要Join操作,代码简洁且效率更高:

步骤与代码示例

import pandas as pd

# 构造原始数据表
data = {
    'customer_id': ['a', 'b', 'c', 'a', 'b', 'a'],
    'date': ['4/11/2022', '5/11/2022', '5/11/2022', '6/11/2022', '6/11/2022', '7/11/2022'],
    'price': [10, 20, 30, 20, 20, 30]
}
df = pd.DataFrame(data)

# 可选但推荐:将日期列转为datetime类型,确保分组内记录按时间排序
df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')

# 核心操作:分组后对price列执行shift,生成上次购买记录
df['last_purchase'] = df.groupby('customer_id')['price'].shift(1)

# 可选:将日期转回原字符串格式
df['date'] = df['date'].dt.strftime('%d/%m/%Y')

print(df)

关键说明

  • groupby('customer_id')['price'].shift(1)会在每个客户的独立分组内,把price列的数值向下偏移一行:当前行的last_purchase自动对应同一客户上一条记录的price,首次购买记录则填充NaN,完全匹配目标表要求。
  • 转换日期为datetime类型是为了避免字符串排序导致的时间顺序错误,确保分组内的记录严格按购买时间排列。

运行上述代码后,输出结果即为你需要的目标数据表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:35:50