熊猫联接/合并操作合二为一来联接数据帧

时间:2019-09-23 04:50:04

标签: python pandas dataframe join merge

我有3个数据帧,如下所示:

>>> a
                     val1
2018-03-04 12:40:00     1
2018-03-04 12:40:01     2
2018-03-04 12:40:02     3
>>> b
                     val2
2018-03-04 12:40:00     5
2018-03-04 12:40:01     2
2018-03-04 12:40:02     1
>>> c
                     val2
2018-03-04 12:40:03    -3
2018-03-04 12:40:04     2
2018-03-04 12:40:05     6

我想将它们“连接并合并”为1个如下所示的数据框:

>>> df
                     val1  val2
2018-03-04 12:40:00     1     5
2018-03-04 12:40:01     2     2
2018-03-04 12:40:02     3     1
2018-03-04 12:40:03   NaN    -3
2018-03-04 12:40:04   NaN     2
2018-03-04 12:40:05   NaN     6

以便合并具有相似索引的任何值,并将那些当前不存在的索引的值仅附加到该索引。

使用join不起作用:

>>> a.join(c)
                     val1  val2
2018-03-04 12:40:00     1   NaN
2018-03-04 12:40:01     2   NaN
2018-03-04 12:40:02     3   NaN

结合使用concatjoin仍然无效,只是表明join仍然无法完成工作,而不是替换{{1 }},它会创建另一列

NaN

但是即使如此,在我的情况下,也无法分辨哪个数据帧包含不位于其他数据帧内的索引,以及哪个索引与另一个数据帧具有相似的索引,因此解决方案必须是通用的。

我能够用python做到这一点,但我想知道是否首先有熊猫解决方案,因为熊猫效率更高,速度更快。

2 个答案:

答案 0 :(得分:1)

尝试:

width:100%

或者:

df=pd.concat([a,b,c],sort=False)
df.groupby(df.index).first()

或者如果只有这3个df,您也可以尝试pd.concat([a,b,c],sort=True).max(level=0)

combine_first

a.combine_first(b).combine_first(c)

答案 1 :(得分:1)

df= pd.concat([a,c]) 
df.update(b)

输出

                     val1  val2
2018-03-04 12:40:00   1.0   5.0
2018-03-04 12:40:01   2.0   2.0
2018-03-04 12:40:02   3.0   1.0
2018-03-04 12:40:03   NaN  -3.0
2018-03-04 12:40:04   NaN   2.0
2018-03-04 12:40:05   NaN   6.0