【发布时间】:2019-09-23 04:50:04
【问题描述】:
我有 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 无论如何都无法完成这项工作,因为它没有替换NaN,而是创建了另一个专栏
>>> pd.concat([a,c]).join(b, lsuffix='_x', rsuffix='_y')
val1 val2_x val2_y
2018-03-04 12:40:00 1.0 NaN 5.0
2018-03-04 12:40:01 2.0 NaN 2.0
2018-03-04 12:40:02 3.0 NaN 1.0
2018-03-04 12:40:03 NaN -3.0 NaN
2018-03-04 12:40:04 NaN 2.0 NaN
2018-03-04 12:40:05 NaN 6.0 NaN
但即便如此,就我而言,无法判断哪个数据帧包含不位于其他数据帧内的索引,以及哪个数据帧具有与另一个数据帧相似的索引,因此解决方案需要是通用的。
我可以在 python 中执行此操作,但我想先了解是否有 pandas 解决方案,因为 pandas 更高效、更快。
【问题讨论】:
-
你能试试
df= pd.concat([a,c])然后df.update(b)吗?
标签: python pandas dataframe join merge