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

如何在Pandas DataFrame中获取客户的上一次购买商品

解决方法

你之前用df.groupby('customer').nth(0)不对,这个方法是取每个客户组的第一条记录,所以所有行都会拿到同一个值。要实现每笔交易对应客户的上一次购买商品,应该用**分组后移位(shift)**的方法:

步骤1:确保数据顺序正确(可选但推荐)

先把date列转为datetime类型,再按customer和date排序,保证交易时间顺序准确:

import pandas as pd

# 构造示例DataFrame
data = {
    'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05'],
    'customer': ['AA', 'AA', 'CC', 'CC', 'AA'],
    'article': [4,7,4,8,9]
}
df = pd.DataFrame(data)

# 转换日期格式并排序
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(['customer', 'date'])

步骤2:分组移位并填充默认值

按customer分组后,对article列执行shift(1)——这个操作会把每个分组内的数据向下移动一行,当前行就能拿到上一行的商品值;组内第一行没有历史数据会得到NaN,最后用fillna(0)把空值替换成0,再转成整数类型:

df['prev_article'] = df.groupby('customer')['article'].shift(1).fillna(0).astype(int)

最终结果

执行完代码后,DataFrame会和你预期的一致:

datecustomerarticleprev_article
2022-01-01AA40
2022-01-02AA74
2022-01-03CC40
2022-01-04CC84
2022-01-05AA97

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:52:39