【问题标题】:How to join two dataframes on 1 column in Python如何在 Python 的 1 列上连接两个数据框
【发布时间】:2021-09-11 03:26:36
【问题描述】:

这里有两个数据框:

df1 = pd.DataFrame({'product_id': [65, 19, 7, 49, 66, 100],
                  'a': [4, 43, 16, 86, 90, 867],
                  'web_id': [6, 4, 69, 54, '', '']})

df2 = pd.DataFrame({'web_id': [4, 54, '', ''],
                  'b': [94, 36, 90, 5],
                  'c': [67, 98, 555, '']})

目标是在 'web_id' 上加入 df1 和 df2 以获得此结果:

df3 = pd.DataFrame({'product_id': [65, 19, 7, 49, 66, 100],
                      'a': [4, 43, 16, 86, 90, 867],
                      'web_id': [6, 4, 69, 54, '', ''],
                      'b': [94, 36, 90, 5, '', ''],
                      'c': [67, 98, 555, '', '', '')})

也许你可以帮忙。

【问题讨论】:

  • 您生成的数据框无效。 b 和 c 的长度不同。
  • 谢谢。我改变了预期的结果

标签: python-3.x pandas dataframe merge


【解决方案1】:

让我们在axis=1上尝试concat,但首先drop共享列和reindex缩放df2,''作为fill_value:

df3 = pd.concat([
    df1,
    df2.drop('web_id', axis=1).reindex(df1.index, fill_value='')
], axis=1)

df3:

   product_id    a web_id   b    c
0          65    4      6  94   67
1          19   43      4  36   98
2           7   16     69  90  555
3          49   86     54   5     
4          66   90                
5         100  867                

替代方案是concat 然后fillna 但是dtypes 可能会随着NaN 的临时引入而转换:

df3 = pd.concat([df1, df2.drop('web_id', axis=1)], axis=1).fillna('')

df3:

通知栏b

   product_id    a web_id     b    c
0          65    4      6  94.0   67
1          19   43      4  36.0   98
2           7   16     69  90.0  555
3          49   86     54   5.0     
4          66   90                  
5         100  867                  

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2019-01-05
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多