我有 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_on
和 merge
:
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/