根据两列的比较连接数据框

Joining dataframes based on the comparison of two columns

我的出发点是这样的

import pandas as pd

dx = {
    'bezeichnung': ['Erlöse' , 'Aufwand' , 'Material_19' , 'Gewinn'] ,
    '2020': ['1001' , '900' , '90' , '11']
}

dx = {
    'bezeichnung': ['Aufwand' , 'Erlöse' , 'Material_16' , 'Gewinn'] ,
    '2019': ['1900' , '2001' , '80' , '21']
}

df1 = pd.DataFrame(dx)
df2 = pd.DataFrame(dy)

我基本上想要以下内容:

结果应该是这样的:

df1 = pd.DataFrame('bezeichnung': ['Erlöse' , 'Aufwand' , 'Material_19' , 'Gewinn', 'Material_16'] ,
    '2020': ['1001' , '900' , '90' , '11', '0'] ,
    '2019': ['2001' , '1900' , '0' , '21', '80'])

非常感谢!

当行中没有匹配值时,您可以使用 outer merge 将左右数据帧的所有行与 NaN 组合。对于您的情况,我将其更改为字符串 '0'。更改 indicator=True 以在附加列名称 _merge

中查看两个数据帧之间的差异
import pandas as pd
import numpy as np

dx = {
    'bezeichnung': ['Erlöse' , 'Aufwand' , 'Material_19' , 'Gewinn'] ,
    '2020': ['1001' , '900' , '90' , '11']
}

dy = {
    'bezeichnung': ['Aufwand' , 'Erlöse' , 'Material_16' , 'Gewinn'] ,
    '2019': ['1900' , '2001' , '80' , '21']
}

# your expected results
df = pd.DataFrame({'bezeichnung': ['Erlöse' , 'Aufwand' , 'Material_19' , 'Gewinn', 'Material_16'] ,
    '2020': ['1001' , '900' , '90' , '11', '0'] ,
    '2019': ['2001' , '1900' , '0' , '21', '80']})

df1 = pd.DataFrame(dx)
df2 = pd.DataFrame(dy)
col = 'bezeichnung'
temp = pd.merge(df1, df2, on=col, how='outer', indicator=False)
temp = temp.replace(np.nan, '0')
# you can check if two dfs are equal
if temp.equals(df):
    print('Two dfs are equal.\n')
print(temp)

输出:

Two dfs are equal.

   bezeichnung  2020  2019
0       Erlöse  1001  2001
1      Aufwand   900  1900
2  Material_19    90     0
3       Gewinn    11    21
4  Material_16     0    80