如何在两个数据框中查找相同的列名并组合匹配的列

Kaa*_*ake 7 python loops pandas

我想循环两个数据框的低谷名称,找到具有相同列名的列,并将它们组合以创建一个新的数据框。

我试图在for循环中编写if-else条件,但是它不起作用。

具体来说,我有两个像这样的数据框:

df1 = pd.DataFrame({'A': {'2019Q1': 1, '2019Q2': 2, '2019Q3': 3},
                'B': {'2019Q1': 1, '2019Q2': 3, '2019Q3': 5},
                'C': {'2019Q1': 2, '2019Q2': 4, '2019Q3': 6}})

df2 = pd.DataFrame({'A': {'2019Q1': 4, '2019Q2': 5, '2019Q3': 6},
                'B': {'2019Q1': 1.5, '2019Q2': 3.3, '2019Q3': 5.6},
                'C': {'2019Q1': 2.3, '2019Q2': 4.8, '2019Q3': 6.7}})
Run Code Online (Sandbox Code Playgroud)

我想要下面的输出-

对于A,输出=

pd.DataFrame({'df1': {'2019Q1': 1, '2019Q2': 2, '2019Q3': 3},
              'df2': {'2019Q1': 4, '2019Q2': 5, '2019Q3': 6}) 
Run Code Online (Sandbox Code Playgroud)

对于B,输出=

pd.DataFrame({'df1': {'2019Q1': 1, '2019Q2': 3, '2019Q3': 5},
              'df2': {'2019Q1': 1.5, '2019Q2': 3.3, '2019Q3': 5.6}) 
Run Code Online (Sandbox Code Playgroud)

对于C,输出=

pd.DataFrame({'df1': {'2019Q1': 2, '2019Q2': 4, '2019Q3': 6},
              'df2': {'2019Q1': 2.3, '2019Q2': 4.8, '2019Q3': 6.7})
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

WeN*_*Ben 5

这是一种类似于@ALollz的方法,但是将subdf保存在多个索引数据帧中

s = pd.concat([df1, df2], keys=['df1', 'df2']).unstack(0)
s.loc[:,'A']
Out[390]: 
        df1  df2
2019Q1    1    4
2019Q2    2    5
2019Q3    3    6
Run Code Online (Sandbox Code Playgroud)


Cod*_*ent 0

由于这两个数据帧均按季度索引,因此您可以merge

for col in np.union1d(df1.columns, df2.columns):
    result = df1[[col]].merge(df2[[col]], how='outer', left_index=True, right_index=True)
    result.index.name = col
    result.columns = ['df1', 'df2']
    print(result)
Run Code Online (Sandbox Code Playgroud)

结果:

        df1  df2
A               
2019Q1    1    4
2019Q2    2    5
2019Q3    3    6

        df1  df2
B               
2019Q1    1  1.5
2019Q2    3  3.3
2019Q3    5  5.6

        df1  df2
C               
2019Q1    2  2.3
2019Q2    4  4.8
2019Q3    6  6.7
Run Code Online (Sandbox Code Playgroud)