Pandas 在每个组的条件为真后保留行

Pandas keep rows after a condition is true for each group

我目前遇到以下问题,我希望在满足条件之前删除 pandas 数据框中的行。我想在“数字”列中满足 10 或更大条件之前删除每一行,具体取决于“名称”列。假设数据框 (df) 有两列,分别称为 'Name' 和 'Number'。我希望在满足条件之前删除每个唯一名称的所有行,并保留之后的所有行。

Name  Number
Matt    4
Matt    5
Matt    13
Matt    4
Sophie  5 
Sophie  14
Sophie  18
Steve   5
Steve   4
Steve   21 

Desired output: 
Name   Number
Matt    13
Matt    4
Sophie  14
Sophie  18
Steve   21

下面的代码会在满足条件后删除所有项目,但这适用于整个系列/值列。我想为每个出现的唯一名称单独执行此操作。有什么办法可以做到这一点,也许用 groupby?

df[(df['Number'] > 10).argmax():]

非常感谢您的帮助!

注:

使用GroupBy.cummax with condition for get greater values like 10 in Series.gt and filter by boolean indexing:

df = df[df['Number'].gt(10).groupby(df['Name']).cummax()]
print (df)
     Name  Number
2    Matt      13
3    Matt       4
5  Sophie      14
6  Sophie      18
9   Steve      21

详细信息Trues 在第一场比赛后重复到组末尾:

print (df['Number'].gt(10).groupby(df['Name']).cummax())
1    False
2     True
3     True
4    False
5     True
6     True
7    False
8    False
9     True
Name: Number, dtype: bool

您可以使用 groupby + cummaxcummax 将 True 之后的每个 False 转换为 True,因此如果您 groupby “名称”,它会创建一个布尔掩码,其中选择大于 10 的值之后的每个值:

msk = df['Number'].gt(10).groupby(df['Name']).cummax()
out = df[msk]

输出:

     Name  Number
2    Matt      13
3    Matt       4
5  Sophie      14
6  Sophie      18
9   Steve      21