
我将使用a
shift和a进行此 *** 作
cumsum(这是一个简单的示例,使用数字而不是时间-
但它们的工作原理完全相同):
In [11]: s = pd.Series([1., 1.1, 1.2, 2.7, 3.2, 3.8, 3.9])In [12]: (s - s.shift(1) > 0.5).fillna(0).cumsum(skipna=False) # *Out[12]:0 01 02 03 14 15 26 2dtype: int64
- 需要skipna = False似乎是一个错误。
然后,您可以在groupby中
apply使用它:
In [21]: df = pd.Dataframe([[1.1, 1.7, 2.5, 2.6, 2.7, 3.4], list('AAABBB')]).TIn [22]: df.columns = ['time', 'ip']In [23]: dfOut[23]: time ip0 1.1 A1 1.7 A2 2.5 A3 2.6 B4 2.7 B5 3.4 BIn [24]: g = df.groupby('ip')In [25]: df['session_number'] = g['time'].apply(lambda s: (s - s.shift(1) > 0.5).fillna(0).cumsum(skipna=False))In [26]: dfOut[26]: time ip session_number0 1.1 A 01 1.7 A 12 2.5 A 23 2.6 B 04 2.7 B 05 3.4 B 1现在,您可以分组'ip'
和'session_number'
(并分析每个会话)。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)