[英]Python Dataframe Pandas - Filter dataframe rows by condition issubset() on column values
我想过滤 Dataframe 行,具体取决于列表的所有项目是否都存在于criteria_a
列中,以获得criteria_b
列中的固定值。
例如,让我们考虑以下 Dataframe:
df = pd.DataFrame({'criteria_a': [1, 2, 3, 4, 1, 1, 2, 3, 4],
'criteria_b': [2, 2, 2, 3, 7, 9, 9, 9, 9],
'value': [0.2, 0.6, 0.1, 0.9, 0.8, 0.7, 0.3, 0.8, 0.1]})
print(df)
criteria_a criteria_b value
0 1 2 0.2
1 2 2 0.6
2 3 2 0.1
3 4 3 0.9
4 1 7 0.8
5 1 9 0.7
6 2 9 0.3
7 3 9 0.8
8 4 9 0.1
criteria_a
列的可能值为list_criteria_a = [1, 2, 3, 4]
。
我想创建一个新的 dataframe ,它只提取列表list_criteria_a
中的所有项目对于给定的criteria_b
值都存在的行。
上述示例的结果将只有最后四行:
criteria_a criteria_b value
0 1 9 0.7
1 2 9 0.3
2 3 9 0.8
3 4 9 0.1
我知道我们必须使用issubset()
,但我不知道如何。 它与帖子非常相似( 如果行包含列表中的所有项目,我如何在 pandas 中获取行的索引? )除了我想过滤行,而不是输出它们的索引,还有一个额外的条件。
非常感谢!
For compare values per groups is best here use GroupBy.transform
with custom function for compare set by issubset
method, output is boolean Series, so possible filter by boolean indexing
:
f = lambda x: set(list_criteria_a).issubset(x)
df1 = df[df.groupby('criteria_b')['criteria_a'].transform(f)]
print (df1)
criteria_a criteria_b value
5 1 9 0.7
6 2 9 0.3
7 3 9 0.8
8 4 9 0.1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.