如何选择满足条件直到组的最后一个元素的 Pandas 数据帧?

如何仅选择val大于 5的行,直到每个id示例数据框中的最后一条记录?


df = pd.DataFrame({'id': [1,1,1,1,1,1,2,2,2,2,2,2],

                   'val': [10,1,1,10,20,30,1,1,1,12,17,28]})


id    val

1      10  <- meets the condition, but condition fails in the next 2 rows

1       1

1       1

1      10  <- meets the condition until the end of this id

1      20

1      30

2       1

2       1

2       1

2      12

2      17

2      28

期望的输出:


id    val

1      10

1      20

1      30

2      12

2      17

2      28

如果只有一个 id,我可以用一些难看的代码来做到这一点,但我不知道如何将类似的逻辑应用于所有组:


df = pd.DataFrame({'id': [1,1,1,1,1,1],

               'val': [10,1,1,10,20,30]})


# create groups at breakpoints where condition is no longer met

g = df.groupby((df['val'] > 5).cumsum())


# find last group

label = max(list(g.groups.keys()))


result = df.loc[g.groups[label]._data]


# result still includes some rows where the condition is not met

result = result[result > 5]


一只萌萌小番薯
浏览 197回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python