首页 > 解决方案 > Pandas,每个 id 的平均差异日期

问题描述

我有一个看起来像这样的数据框:

745416  ,2019-03-13 ,0.89   ,_3428611
1015533 ,2019-03-13 ,1.99   ,_3428674
486224  ,2019-03-13 ,16.99  ,_3427319
486224  ,2019-03-13 ,9.99   ,_3427320
745416  ,2019-03-13 ,0.89   ,_3428629
176106  ,2019-03-13 ,1.99   ,_3428983
486224  ,2019-03-13 ,13.49  ,_3427321
1015533 ,2019-03-13 ,1.99   ,_3428675
288537  ,2019-03-13 ,15.99  ,_3426780
745416  ,2019-03-13 ,1.19   ,_3428626
176106  ,2019-03-13 ,1.79   ,_3428987
67092   ,2019-03-13 ,16.99  ,_3426557
67092   ,2019-03-13 ,15.49  ,_3426562
67092   ,2019-03-13 ,11.49  ,_3426558

它是一个订单列表,一个ID可以有多行,当然日期可以改变。

我想计算每个 ID 的订单之间的平均间隔。

我试图做的事情:

按 id 分组

对于每个 ID,请在 Date 列上执行 diff().mean()。

grouped = df.groupby('ID')
for a in grouped:
   r['id'] = a['id']
   r['avg_interval'] = a['date'].diff().mean()

我想要的输出:

 123123, 2 days
 123453, 1 day 5 hours
 122656, 4 days
 143143, 2 days
 123123, 2 days
 17 2767, 2 days

我确信有更好的方法来做到这一点。

标签: pythonpandas

解决方案


你可以这样做:

df.groupby('ID').apply(lambda x: ((x['date']-x['date'].shift()).fillna(0)).mean())

但在执行此操作之前,请确保将日期列转换为 python 日期格式:

df['date']=pd.to_datetime(df['date'],format='%Y-%m-%d')

推荐阅读