熊猫,每个ID的平均比较日期

时间:2020-06-03 09:45:18

标签: python pandas

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

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 在“日期”列上进行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

我敢肯定有更好的方法。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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

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

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