【问题标题】:Python loop through group elementsPython循环遍历组元素
【发布时间】: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


【解决方案1】:

遍历 groupby,然后遍历每个组的各个行:

for name, group in groupBySession:
   for index, row in group.iterrows():
       row['whtevr col']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多