我有 2 个 Excel 表都放入了 Pandas 数据框。

前任:

1.csv
EmployeeID | DOB        | Age
A          | 12/11/1978 | 2
B          | 12/09/1988 | 8
C          | 12/02/1985 | 20
D          | 11/11/1990 | 25

2.csv
MemberIdentifier| DateofBirth| YOW
A               | 12/11/1978 | 2
B               | 12/09/1988 | 8
C               | 12/02/1985 | 20

result.csv
EmployeeID | MemberIdentifier | DOB        |DateofBirth| Exp | YOW
A          |       A          | 12/11/1978 | 12/11/1978| 2   | 2
B          |       B          | 12/09/1988 | 12/09/1988| 8   | 8
C          |       C          | 12/02/1985 | 12/02/1985| 20  | 20
D          |       NA         | NA         | NA        | NA  | NA

现在我如何获得基于数据而不是基于列名比较两个工作表的结果,因为列名可以是任何东西。

任何关于如何开始的提示或想法都会很棒!!

最佳答案

您需要在 left_on 中使用左连接参数 right_onmerge:

df = pd.merge(df1, df2, left_on='EmployeeID', right_on='MemberIdentifier', how='left')
print (df)
  EmployeeID         DOB  Age MemberIdentifier DateofBirth   YOW
0          A  12/11/1978    2                A  12/11/1978   2.0
1          B  12/09/1988    8                B  12/09/1988   8.0
2          C  12/02/1985   20                C  12/02/1985  20.0
3          D  11/11/1990   25              NaN         NaN   NaN

如果需要匹配两个 DataFrames 中的列,请使用:
d = {}
for col2 in df2.columns:
    for col1 in df1.columns:
        cond = df2[col2].isin(df1[col1]).all()
        if cond:
            d[col2] = col1

print (d)
{'MemberIdentifier': 'EmployeeID', 'DateofBirth': 'DOB', 'YOW': 'Age'}

最后,您可以通过 dict 重命名列:
df2 = df2.rename(columns=d)
print (df2)
  EmployeeID         DOB  Age
0          A  12/11/1978    2
1          B  12/09/1988    8
2          C  12/02/1985   20

关于python - 匹配列名不同的 2 个 Excel 工作表的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41296226/

10-15 18:19