如何使用pandas计算各商品平均购买间隔并新增对应列
实现步骤与代码
你给出的示例中DataFrame构造代码存在语法错误(data列表闭合括号位置错误),先修正后按以下逻辑实现:
1. 基础数据准备
import pandas as pd # 修正语法错误后的DataFrame构造代码 df = pd.DataFrame(data=[['A', '2021-01-06 10:25:21'], ['A', '2020-11-04 08:48:23'], ['B', '2020-10-26 17:04:34'], ['C', '2020-08-05 17:06:09'], ['A', '2021-04-15 13:20:50'], ['B', '2021-04-05 18:20:29'], ['A', '2021-04-15 13:20:50'], ['C', '2021-01-05 14:05:09']], columns=['product', 'purchased_at']) # 将购买时间转换为datetime格式,支持时间差计算 df['purchased_at'] = pd.to_datetime(df['purchased_at'])
2. 场景1:新增列存储每个商品全量的平均购买间隔(同商品所有记录值一致)
直接对同商品所有历史购买时间差求均值,映射回原表即可,支持任意数量的商品分组:
# 时间间隔单位默认为秒,如需天单位可替换为 .diff().dt.days.mean() df['avg_purchase_interval'] = df.groupby('product')['purchased_at'].transform( lambda x: x.sort_values().diff().dt.total_seconds().mean() )
3. 场景2:新增列存储单条记录对应的历史累计平均间隔(仅计算该次购买之前的间隔均值)
如果需要每条购买记录对应截止到本次购买的历史平均间隔(不包含后续购买数据),用以下逻辑实现:
# 先按商品+购买时间升序排序全表 df = df.sort_values(['product', 'purchased_at']).reset_index(drop=True) # 计算同商品相邻两次购买的时间差 df['time_diff'] = df.groupby('product')['purchased_at'].diff().dt.total_seconds() # 计算累计平均间隔,第一条购买记录无前置数据为NaN df['history_avg_interval'] = df.groupby('product')['time_diff'].expanding().mean().reset_index(drop=True)
内容的提问来源于stack exchange,提问作者user15702432
相关产品推荐
相关产品推荐

