首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并/合并数据帧

合并/合并数据帧
EN

Stack Overflow用户
提问于 2020-09-24 17:08:14
回答 2查看 51关注 0票数 0

我有许多数据帧,我需要合并/连接所有这些数据帧。DF1是主/主数据帧,然后还有许多包含key1和key2的较小数据帧。在主数据帧以外的所有数据帧中,给定的key1和key2对将只有1行。现在,我遍历所有数据帧,并将它们逐个合并到主/结果中,因此我获得了许多columns_x和columns_y

我做了这样的事情

代码语言:javascript
复制
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'])

附件是数据帧的图片和我想要看到的结果。

有没有人能帮帮我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-24 17:28:00

您可以垂直连接兼容的数据帧(df2、df3和df4),然后将它们与df1水平合并,如下所示:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
   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
票数 0
EN

Stack Overflow用户

发布于 2020-09-24 17:37:11

为什么不在连接之前重命名列呢?除了列的命名之外,您所做的一切都没有错。如果您有同名的列:

代码语言:javascript
复制
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'])

收益率:

代码语言:javascript
复制
             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

如果列名相等:

代码语言:javascript
复制
 bf.columns=['A', 'B', 'C']
 result = pd.merge(af, bf, how='outer',on=['key1', 'key2'])

你会得到:

代码语言:javascript
复制
           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   F4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64043169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档