首页 > 解决方案 > 如果组内的一行满足熊猫中的特定条件,如何选择组的所有行

问题描述

我有一个看起来像这样的数据框

pd.DataFrame({'a': ['cust1', 'cust1', 'cust1', 'cust2', 'cust2', 'cust3', 'cust3', 'cust4', 'cust4'],
                   'year': [2017, 2018, 2019, 2018, 2019, 2017, 2018, 2018, 2019],
                   'cond': [True, True, False, True, True, True, True, True, True]})

       a  year   cond
0  cust1  2017   True
1  cust1  2018   True
2  cust1  2019  False
3  cust2  2018   True
4  cust2  2019   True
5  cust3  2017   True
6  cust3  2018   True
7  cust4  2018   True
8  cust4  2019   True

如何选择“a”列中的所有组行,其中“year”= 2019 具有“cond”= True?

结果数据框应如下所示

       a  year   cond
3  cust2  2018   True
4  cust2  2019   True
7  cust4  2018   True
8  cust4  2019   True

逻辑:

组 cust1 的行没有被选为 2019 年 = False

组 cust2 的行被选为 2019 年 = True

组 cust3 的行没有被选为 2019 年 无可用数据

组 cust4 的行被选为 2019 年 = True

标签: pythonpandaspandas-groupby

解决方案


试试这个,boolean_indexing+Series.isin

print(
    df[df.a.isin(df.loc[df.year.eq(2019) & df.cond, 'a'].unique())]
)

       a  year  cond
3  cust2  2018  True
4  cust2  2019  True
7  cust4  2018  True
8  cust4  2019  True

推荐阅读