繁体   English   中英

如果组内的一行满足 pandas 中的特定条件,如何 select 组的所有行

[英]How to select all rows of group if one row within group meets certain condition in pandas

我有一个 dataframe 看起来像这样

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

我如何 select 列 'a' 中的所有组行,其中 'year' = 2019 有 'cond' = True?

结果 dataframe 应该看起来像这样

       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

试试这个, 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM