python:提取列值大于3的行

2024-04-26 10:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

数据帧如下所示:

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

我想提取groupby id和number column的值在2016年和2017年都大于3的行。你知道吗

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

   id  year number
    1   2016  3
    1   2017  5

谢谢!你知道吗


Tags: 数据idnumbercolumnyeargroupby
2条回答
>>> 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

>=3比较,并对与原始大小相同的序列使用^{},因此可能按^{}过滤:

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

或者使用^{},但如果数据帧较大或组较多:

df1 = df.groupby("id").filter(lambda x: (x["number"] >= 3).all())

相关问题 更多 >