[英]Pandas, filter dataframe based on unique values in one column and grouby in another
[英]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
進行比較。 然后使用all
和any
將其縮小回一維數組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.