我有一个这样的数据框:

StringCol Timestamp GroupID Flag
   xyz    20170101   123     yes
   abc    20170101   123     yes
   def    20170101   123     yes
   ghi    20170101   123     no
   abc    20170101   124     yes
   jkl    20170101   124     yes
   pqr    20170101   124     no
   klm    20170101   124     yes


我想按GroupID对此分组,对于每个组,我希望标记为“ no”的行以及之前的X行数(该数据帧已按GroupID和Timestamp排序)。

因此,如果X = 2,我希望结果为:

StringCol Timestamp GroupID Flag
   abc    20170101   123     yes
   def    20170101   123     yes
   ghi    20170101   123     no
   abc    20170101   124     yes
   jkl    20170101   124     yes
   pqr    20170101   124     no


我该如何实现?谢谢。

最佳答案

这将获取每组最后一个标志的前X个项目。

def prevK(x):
    i = x.reset_index(drop=True).Flag.eq('no').iloc[::-1].idxmax()
    return x.iloc[i - 2:i + 1, :]

df.groupby('GroupID', group_keys=False).apply(prevK)

  StringCol  Timestamp  GroupID Flag
1       abc   20170101      123  yes
2       def   20170101      123  yes
3       ghi   20170101      123   no
4       abc   20170101      124  yes
5       jkl   20170101      124  yes
6       pqr   20170101      124   no

关于python - 如何基于当前行的条件获取 Pandas GroupedBy数据框的前几行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51958126/

10-12 17:25
查看更多