我有一个DataFrame
喜欢的追随者。
df = pd.DataFrame({'id' : [1,1,2,3,2],
'value' : ["a","b","a","a","c"], 'Time' : ['6/Nov/2012 23:59:59 -0600','6/Nov/2012 00:00:05 -0600','7/Nov/2012 00:00:09 -0600','27/Nov/2012 00:00:13 -0600','27/Nov/2012 00:00:17 -0600']})
我需要获得如下输出。
combined_id | enter time | exit time | time difference
应通过将“ id”和“ value”分组来创建Combined_id
g = df.groupby(['id', 'value'])
以下操作不适用于按两列分组。(如何使用first()
和last()
这里作为进入和退出时间?)
df['enter'] = g.apply(lambda x: x.first())
获得差异会跟随工作吗?
df['delta'] = (df['exit']-df['enter'].shift()).fillna(0)
首先确保您的列是正确的日期时间列:
In [11]: df['Time'] = pd.to_datetime(df['Time'])
现在,您可以执行groupby并将agg与first
and last
groupby方法一起使用:
In [12]: g = df.groupby(['id', 'value'])
In [13]: res = g['Time'].agg({'first': 'first', 'last': 'last'})
In [14]: res = g['Time'].agg({'enter': 'first', 'exit': 'last'})
In [15]: res['time_diff'] = res['exit'] - res['enter']
In [16]: res
Out[16]:
exit enter time_diff
id value
1 a 2012-11-06 23:59:59 2012-11-06 23:59:59 0 days
b 2012-11-06 00:00:05 2012-11-06 00:00:05 0 days
2 a 2012-11-07 00:00:09 2012-11-07 00:00:09 0 days
c 2012-11-27 00:00:17 2012-11-27 00:00:17 0 days
3 a 2012-11-27 00:00:13 2012-11-27 00:00:13 0 days
注意:这是一个无聊的示例,因为每个组中只有一个项目...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句