[英]How to select all rows if no conditions are met within a group and select a subset of rows if certain conditions within a group are met in pandas
[英]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.