[英]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.