我有许多数据帧,我需要合并/连接所有这些数据帧。DF1是主/主数据帧,然后还有许多包含key1和key2的较小数据帧。在主数据帧以外的所有数据帧中,给定的key1和key2对将只有1行。现在,我遍历所有数据帧,并将它们逐个合并到主/结果中,因此我获得了许多columns_x和columns_y
我做了这样的事情
result = pd.merge(df1, df2, how='outer',on=['key1', 'key2'])
result = pd.merge(result, df3, how='outer',on=['key1', 'key2'])
result = pd.merge(result, df4, how='outer',on=['key1', 'key2'])附件是数据帧的图片和我想要看到的结果。
有没有人能帮帮我。

发布于 2020-09-24 17:28:00
您可以垂直连接兼容的数据帧(df2、df3和df4),然后将它们与df1水平合并,如下所示:
df1 = pd.DataFrame({'key1': [1, 1, 1, 1, 1, 1], 'key2': [1, 2, 3, 4, 5, 6], 'A': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
'B': ['B1', 'B2', 'B3', 'B4', 'B5', 'B6'], 'C': ['C1', 'C2', 'C3', 'C4', 'C5', 'C6']})
df2 = pd.DataFrame({'key1': [1, 1], 'key2': [3, 4], 'D': ['D1', 'D2'], 'E': ['E1', 'E2'], 'F': ['F1', 'F2']})
df3 = pd.DataFrame({'key1': [1, 1], 'key2': [1, 5], 'G': ['G1', 'G2'], 'H': ['H1', 'H2']})
df4 = pd.DataFrame({'key1': [1, 1], 'key2': [2, 6], 'I': ['I1', 'I2'], 'J': ['J1', 'J2'], 'D': ['D1_DF4', 'D2_DF4'],
'G': ['G1_DF4', 'G2_DF4']})
df_concat = pd.concat([df2, df3, df4], sort=False, ignore_index = True)
df_merge = pd.merge(df1, df_concat, on=['key1', 'key2'], how = 'outer')
df_merge输出:
key1 key2 A B C D E F G H I J
0 1 1 A1 B1 C1 NaN NaN NaN G1 H1 NaN NaN
1 1 2 A2 B2 C2 D1_DF4 NaN NaN G1_DF4 NaN I1 J1
2 1 3 A3 B3 C3 D1 E1 F1 NaN NaN NaN NaN
3 1 4 A4 B4 C4 D2 E2 F2 NaN NaN NaN NaN
4 1 5 A5 B5 C5 NaN NaN NaN G2 H2 NaN NaN
5 1 6 A6 B6 C6 D2_DF4 NaN NaN G2_DF4 NaN I2 J2发布于 2020-09-24 17:37:11
为什么不在连接之前重命名列呢?除了列的命名之外,您所做的一切都没有错。如果您有同名的列:
import pandas as pd
af = pd.DataFrame(data=[[1,1,'A1','B1','C1'],
[1,2,'A2','B2','C2'],
[1,1,'A3','B3','C3']],
columns=['key1', 'key2', 'A', 'B', 'C'])
af = af.set_index(['key1', 'key2'])
bf = pd.DataFrame(data=[[1,3,'D3','E3','F3'],
[1,4,'D4','E4','F4']],
columns=['key1', 'key2', 'D', 'E', 'F'])
bf = bf.set_index(['key1', 'key2'])
result = pd.merge(af, bf, how='outer',on=['key1', 'key2'])收益率:
A B C D E F
key1 key2
1 1 A1 B1 C1 NaN NaN NaN
1 A3 B3 C3 NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN
3 NaN NaN NaN D3 E3 F3
4 NaN NaN NaN D4 E4 F4如果列名相等:
bf.columns=['A', 'B', 'C']
result = pd.merge(af, bf, how='outer',on=['key1', 'key2'])你会得到:
A_x B_x C_x A_y B_y C_y
key1 key2
1 1 A1 B1 C1 NaN NaN NaN
1 A3 B3 C3 NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN
3 NaN NaN NaN D3 E3 F3
4 NaN NaN NaN D4 E4 F4https://stackoverflow.com/questions/64043169
复制相似问题