python:提取列值大于3的行

问题描述 投票:1回答:3

存在如下数据框:

id  year number
1   2016  3
1   2017  5
2   2016  1
2   2017  5
...

我想提取2016年和2017年中groupby id且number列的值大于3的行。

例如,在上面的前4行中,结果是:

   id  year number
    1   2016  3
    1   2017  5

谢谢!

python python-3.x pandas
3个回答
1
投票
>>> great_in_both_years = df.groupby("id").apply(lambda x: (x["number"] >= 3).all())
>>> great_in_both_years
id
1     True
2    False
dtype: bool

>>> df.loc[lambda x: x["id"].map(great_in_both_years)]
   id  year  number
0   1  2016       3
1   1  2017       5

1
投票

比较>=3,对于与原始尺寸相同的系列使用GroupBy.transform,因此可以通过GroupBy.transform进行过滤:

boolean indexing

或使用boolean indexing,但如果是大型DataFrame或有许多组,它应该比较慢:

df1 = df[(df["number"] >= 3).groupby(df["id"]).transform('all')]
#alternative for reassign mask to column
#df = df[df.assign(number= df["number"] >= 3).groupby("id")['number'].transform('all')]
print (df1)
   id  year  number
0   1  2016       3
1   1  2017       5

-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.