python - ylabel - 計算按特定列分組的項目之間的平均時間差



subplot title python (1)

考慮以下方法:

In [84]: df.sort_values('time').groupby('userid')['time'] \
           .apply(lambda x: x.diff().dt.seconds.mean()/60)
Out[84]:
userid
1     3.500000
2    19.666667
3     2.000000
4          NaN
Name: time, dtype: float64

一些解釋:

首先我們按time排序DF,否則我們可能會有負面的差異。

然後,我們按userid進行分組,並為每個組計算所有連續行的時間差(排序) - 這將生成一系列timedelta64[ns] ,它具有.dt.seconds訪問器。

使用.dt.seconds.mean()我們可以計算每個組的平均值

更新:

平均只有小於60分鐘的差異

In [122]: threshold = 60
     ...:
     ...: (df.sort_values('time').groupby('userid')['time']
     ...:    .apply(lambda x: (x.diff().dt.seconds/60)
     ...:                     .to_frame('diff')
     ...:                     .query("diff < @threshold")['diff'].mean()))
     ...:
Out[122]:
userid
1     3.500000
2    19.666667
3     2.000000
4          NaN
Name: time, dtype: float64

我有以下數據框:

userid | time     
1        22.01.2001 13:00
1        22.01.2001 13:05   
1        22.01.2001 13:07  
2        22.01.2001 14:00
2        22.01.2001 14:04   
2        22.01.2001 13:05  
2        22.01.2001 13:06  
3        22.01.2001 13:20  
3        22.01.2001 13:22  
4        22.01.2001 13:37  

我想獲得的是每個用戶存儲連續活動之間的平均時差的新列:

userid | avg_time_diff
1        3.5    #(5 + 2) / 2
2        2      #(4 + 1 + 1) / 3
3        2
4        0

為了達到這個目的,我是否需要循環每個用戶並逐一計算平均時差? 或者,有沒有更快的方法來達到相同的結果?





group-by