簡體   English   中英

如何迭代每一行並從一個 dataframe 的特定列中找到下一個匹配列值並將其與另一個 dataframe 進行比較?

[英]How to iterate each row and find the next matching column value from a specific column from one dataframe and comparing it to another dataframe?

我有兩個數據框:

DF1:A組

employee_id  |     key
100               101001
101               020208
102               101002
103               020208
104               020208
...               ...
300               010506

DF2:B組

employee_id  |    key
110              101001
111              020208
112              020105
113              020208
114              020208
...              ...
600              051007

比較兩個數據框中每一行的key 對於每個匹配的員工,使用DF1.employee_id, DF1.key, DF2.employee_id創建一個新的 dataframe 並從 DF2 中刪除匹配的人。

我想一次迭代 DF1 中的每個員工,並在 DF2 中找到一條行進記錄,一旦匹配就刪除 DF2 中的該記錄。 您的目標是不要為 DF1 中的每個匹配員工提供來自 DF2 的重復匹配員工。 如何迭代這個過程?

clean = df_1.merge(df_2, on=['key'], how='left')

上面的腳本會給我重復的記錄。 我希望新的 dataframe 看起來像這樣:

新 Dataframe(樣本):

employee_id_df1  |    key      |  employee_id_df2
100                  101001         110
101                  020208         111
103                  020208         113
104                  020208         114

目標是進行一對一的比賽。

您可以嘗試創建一個在合並中使用的臨時列:

df1["tmp"] = df1.groupby("key").cumcount()
df2["tmp"] = df2.groupby("key").cumcount()

df_out = pd.merge(df1, df2, on=["key", "tmp"], how="inner")
df_out = df_out.rename(
    columns={"employee_id_x": "employee_id_df1", "employee_id_y": "employee_id_df2"}
).drop(columns="tmp")

print(df_out)

印刷:

   employee_id_df1     key  employee_id_df2
0              100  101001              110
1              101   20208              111
2              102   20105              112
3              103   20208              113
4              104   20208              114

暫無
暫無

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

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