簡體   English   中英

檢查 dataframe 中的行值是否存在於另一個 dataframe 中,使用循環進行協調

[英]Check if row value in a dataframe exists in another dataframe using loop for reconciliation

我希望開發一些通用邏輯,使我能夠在 2 個數據集之間執行協調。

我有 2 個數據框,我想遍歷 df1 中的每一行值並檢查它是否存在於 df2 中。 如果它確實存在,我想在 df1 中創建一個新列“匹配”,值為“是”,如果它不存在,我想 append 在單獨的 df 中缺失值,我將打印到 csv。

示例數據集:

df1:

ID   Name     Age
1    Adam     45  
2    Bill     44   
3    Claire   23  

df2:

ID   Name     Age
1    Adam     45 
2    Bill     44 
3    Claire   23
4    Bob      40
5    Chris    21

我在這里使用的 2 個數據框中的列名僅供參考。 但基本上我想檢查 df1 中的行 (1, Adam, 45) 是否存在於 df2 中。

df3 的 output 如下所示: df3:

ID   Name     Age
4    Bob      40  
5    Chris    21 

更新后的 df1 如下所示: df2:

ID   Name     Age  Match
1    Adam     45    Yes  
2    Bill     44    Yes  
3    Claire   23    Yes 

需要明確的是,我知道這可以使用合並或 isin 來完成,但希望有一個可用於任何數據集的流體解決方案。

我很感激這可能是一個很大的問題,因為我沒有提供太多指導,但任何幫助都會很棒!

謝謝!!

您需要在此處使用merge並利用indicator=True功能:

df_all = df1.merge(df2, on=['ID'], how='outer', indicator=True)
df3 = df_all[df_all['_merge'] == 'right_only'].drop(columns=['Name_x', 'Age_x']).rename(columns={'Name_y': 'Name', 'Age_y': 'Age'})[['ID', 'Name', 'Age']]
df2 = df_all[df_all['_merge'] == 'both'].drop(columns=['Name_x', 'Age_x']).rename(columns={'Name_y': 'Name', 'Age_y': 'Age'})[['ID', 'Name', 'Age']]
print(df3)
print(df2)

df3:

   ID   Name  Age
3   4    Bob   40
4   5  Chris   21

df2:

   ID    Name  Age
0   1    Adam   45
1   2    Bill   44
2   3  Claire   23

暫無
暫無

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

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