【发布时间】:2018-09-22 14:10:47
【问题描述】:
我有一个格式如下的数据框对象:
_id botId id sessionId timestamp intentStatus
0 5ba2a04 tony 9336 asdg23eas 1537385724842 NotHandled
1 5babb04 tony 0434 bbdg23eas 1537385722365 Handled
2 6ba2a04 tony 7336 bbdg23eas 1537385932445 NotHandled
3 7babb04 tony 0454 asdg23eas 1537385038234 Handled
我想通过sessionId对上面的dataframe进行分组,然后求出每个组的最后一个元素时间戳和第一个元素时间戳的时间差。到目前为止,我能够做到这一点:
groupBySession = df.groupby('sessionId')
for name, group in groupBySession:
group = group.reset_index(drop=True)
上述方法的问题是我无法在创建的各个组中循环,因为索引未重置。从上面的代码中,我得到了以下格式的组:
第一组
_id botId id sessionId timestamp intentStatus
0 5ba2a04 tony 9336 asdg23eas 1537385724842 NotHandled
1 7babb04 tony 0454 asdg23eas 1537385724842 NotHandled
第二组
_id botId id sessionId timestamp intentStatus
0 5babb04 tony 0434 bbdg23eas 1537385722365 Handled
1 6ba2a04 tony 7336 bbdg23eas 1537385932445 NotHandled
如果您注意到,索引被替换并且从 0 开始。但是,当我尝试将第二组第一个元素打印为
print(group[0])
我收到以下错误:
KeyError: 0
我做错了什么或遗漏了什么?有没有更好的方法来实现这一点?
【问题讨论】:
-
那些是单独的数据框,你可以看到组的类型,在打印行中使用 loc
-
group现在有一个数据框,它没有列0 -
使用
loc:group.loc[0,:] -
你在
df.groupby('sessionId')['timestamp'].apply(lambda L: L.iloc[-1] - L.iloc[0])之后吗? -
@RafaelC,你能解释一下吗?我对python很陌生。我的要求是,拿到分组后,想找出最后一个元素的时间戳和第一个元素的时间戳的区别
标签: python pandas pandas-groupby