开发者社区> 问答> 正文

在pandas中合并两个数据帧

一码平川MACHEL 2019-02-28 14:14:25 554

我有以下两个数据框:

import pandas as pd

data1 = {'date' : ['1', '2','3'],

 'value1' : ['a', 'b' ,'c'],
 'value2' : ['12','24','4']}

data2 = {'date' : ['2','3','4'],

 'value1' : ['b', 'c' ,'g'],
 'value2' : ['24','4','55']}

df1 = pd.DataFrame(data1)
df1 = df1.set_index('date')
df2 = pd.DataFrame(data2)
df2 = df2.set_index('date')
这是我想要的输出:

desired_result = {'date' : ['1','2','3','4'],

 'value1' : ['a', 'b', 'c', 'g'],
 'value2' : ['12', '24', '4', '55']}

我已经尝试了所有不同类型的合并,加入,concat但无法弄清楚。

Python
分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:29:44

    这不是一个合并问题,但您可以使用combine_first:

    df1.combine_first(df2).reset_index()

    date value1 value2
    0 1 a 12
    1 2 b 24
    2 3 c 4
    3 4 g 55
    另一个建议是concat和drop_duplicates:

    pd.concat([df1, df2]).reset_index('date').drop_duplicates('date')

    date value1 value2
    0 1 a 12
    1 2 b 24
    2 3 c 4
    5 4 g 55


    感觉就像一个groupby问题

    pd.concat([df1,df2]).groupby(level=0).last()

     value1 value2

    date
    1 a 12
    2 b 24
    3 c 4
    4 g 55


    只需使用outer合并并选择正确keys的连接就像这样。

    删除set_index数据帧,你不需要。

    data1 = {'date' : ['1', '2','3'],

     'value1' : ['a', 'b' ,'c'],
     'value2' : ['12','24','4']}

    data2 = {'date' : ['2','3','4'],

     'value1' : ['b', 'c' ,'g'],
     'value2' : ['24','4','55']}
    

    df1 = pd.DataFrame(data1)
    df2 = pd.DataFrame(data2)

    join with the key columns date, value1 & value2

    df4 = pd.merge(df1, df2, on=['date', 'value1', 'value2'], how='outer')
    产量

    date    value1  value2

    0 1 a 12
    1 2 b 24
    2 3 c 4
    3 4 g 55

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题