簡體   English   中英

"Pandas:通過另一個數據幀的多個同時列值過濾一個數據幀"

[英]Pandas: filter one dataframe by multiple, simultaneous column values of another dataframe

我有一個名為correct_df<\/code>的過濾數據框和一個原始數據框example_df<\/code> 。

example_df = pd.DataFrame({'Test': ['Test_1', 'Test_1', 'Test_1', 'Test_2', 'Test_2', 'Test_2', 'Test_3', 'Test_3', 'Test_3'], 'A': [1, 2, 3, 1, 2, 3, 1, 2, 3]})
other_df = pd.DataFrame({'Test': ['Test_1', 'Test_1', 'Test_3', 'Test_3'], 'A': [1, 2, 1, 3]})

使用DataFrame.reset_index<\/code><\/a>避免丟失索引,然后使用DataFrame.merge<\/code><\/a> :

result = example_df.reset_index().merge(other_df, on=['Test','A'])
print (result)
   index    Test  A
0      0  Test_1  1
1      1  Test_1  2
2      6  Test_3  1
3      8  Test_3  3

@jezrael 的解決方案絕對適合您的問題。 這只是使用 numpy 獲得相同結果的另一種方式(有點復雜)。

我們可以直接使用布爾數組過濾example_df ,我們可以通過檢查example_df中的行是否存在other_df來構造該數組。 為此,我們需要將example_df設為 3D 數組並使用 numpy 廣播與other_df進行比較。 然后使用allany將其縮小回一維數組msk

msk = (example_df.to_numpy()[:, None]==other_df.to_numpy()).all(axis=2).any(axis=1)
out = example_df[msk]

輸出:

     Test  A
0  Test_1  1
1  Test_1  2
6  Test_3  1
8  Test_3  3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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