我有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
结合使用concat
和join
仍然无效,只是表明join
仍然无法完成工作,而不是替换{{1 }},它会创建另一列
NaN
但是即使如此,在我的情况下,也无法分辨哪个数据帧包含不位于其他数据帧内的索引,以及哪个索引与另一个数据帧具有相似的索引,因此解决方案必须是通用的。
我能够用python做到这一点,但我想知道是否首先有熊猫解决方案,因为熊猫效率更高,速度更快。
答案 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