簡體   English   中英

Python Dataframe Pandas - 過濾 Z6A8064B5DF4794555500553C47C55055DZ 行的條件子集

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM