在熊猫中合并两个数据框

时间:2019-02-25 23:55:06

标签: python pandas join merge

我下面有两个数据框:

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']}

我尝试了所有不同种类的合并,联接,合并,但无法弄清楚。 谢谢。

4 个答案:

答案 0 :(得分:2)

这并非完全是合并问题,但您可以使用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

另一个建议是concatdrop_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

答案 1 :(得分:2)

感觉像一个groupby问题

pd.concat([df1,df2]).groupby(level=0).last()
     value1 value2
date              
1         a     12
2         b     24
3         c      4
4         g     55

答案 2 :(得分:1)

如果使用简单的联接/合并,则将有一些空值。

为此有

pandas.DataFrame.combine_firstpandas.DataFrame.combine

一个简单的方法:df1.combine_first(df2)应该可以正常工作。

答案 3 :(得分:1)

这绝对是一个完美的merge问题,只需使用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
相关问题