python - 合并数据框而不重复列

标签 python pandas dataframe merge

我有 3 个具有不同结构的数据框,其中一个包含 2 个与另外两个链接的键:

df1 = id1  id2    df2 = id1  a   b1  c1  c2    df3 = id2 a   b1   b2   c1
      1                 1    1a  1b1 1c1 1c2         11  11a 11b1 11b2 11c1
           11           2    2a  2b1 2c1 2c2         12  12a 12b1 12b2 12c1
           12           3    3a  3b1 3c1 3c2         13  13a 13b1 13b2 13c1
           13                                        14  14a 14b1 14b2 14c1
      2                                              21  21a 21b1 21b2 21c1
           21                                        22  22a 22b1 22b2 22c1
           22                                        23  23a 23b1 23b2 23c1
                                                     31  31a 31b1 31b2 31c1

然后我将 df1df2 合并:

df1 = pd.merge(df1, df2, on='id1', how='left')

df1 = id1  id2  a   b1  c1  c2
      1         1a  1b1 1c1 1c2
           11   nan nan nan nan
           12   nan nan nan nan
           13   nan nan nan nan
      2         2a  2b1 2c1 2c2
           21   nan nan nan nan
           22   nan nan nan nan

但是当我与 df3 合并时,我有:

df1 = pd.merge(df1, df3, on='id2', how='left')

df1 = id1  id2   a_x  b1_x  c1_x  c2   a_y  b1_y  b2   c1_y  
      1          1a   1b1   1c1   1c2
           11    nan  nan   nan   nan  11a  11b1  11b2 11c1
           12    nan  nan   nan   nan  12a  12b1  12b2 12c1
           13    nan  nan   nan   nan  13a  13b1  13b2 13c1
      2          2a   2b1   2c1   2c2
           21    nan  nan   nan   nan  21a  21b1  21b2 21c1
           22    nan  nan   nan   nan  22a  22b1  22b2 22c1

简而言之,当合并的数据帧之间存在重叠列时,该方法会创建一个带有后缀的新列。但是,我希望当这些值是重合列时被替换。

我想要得到的是:

df1 = id1  id2   a    b1    c1    c2   b2   
      1          1a   1b1   1c1   1c2
           11    11a  11b1  11c1       11b2
           12    12a  12b1  12c1       12b2
           13    13a  13b1  13c1       13b2
      2          2a   2b1   2c1   2c2
           21    21a  21b1  21c1       21b2
           22    22a  22b1  22c1       22b2

我还尝试在第二次合并之前 fillna('') ,但得到了相同的结果。

最佳答案

尝试如下

df1 = pd.merge(df1, df3, on='id2', how='left')
df1['a']=df1['a_y'].fillna(df1['a_x'])
df1['b']=df1['b_y'].fillna(df1['b_x'])
df1['c1']=df1['c1_y'].fillna(df1['c1_x'])

关于python - 合并数据框而不重复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57335366/

相关文章:

java - Scala 中的 Spark UDF 用于提取相关数据

python - 如何在python 3.6中整齐地打印一长串数字?

python - 如何为 PyQt 演示和 Qt 工具安装 Qt 文档

python - 使用另一个列表的索引对python列表进行排序

r - 更新数据框的子集

python - 应用具有两个数据框字段的函数

Python模块在多个产品之间共享

python - Excel 编码影响 pandas 过滤

python - 计算由长度不等的二维索引列表给出的 DataFrame 行组的平均值

python - 从url读取csv并通过pandas将其推送到数据库中