我有一个看起来像这样的数据框:
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
我敢肯定有更好的方法。
答案 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')