我有 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,b,c],sort=False)
df.groupby(df.index).first()
或者:
pd.concat([a,b,c],sort=True).max(level=0)
或者如果只有这3个dfs,你也可以尝试combine_first
:
a.combine_first(b).combine_first(c)
<小时/>
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
关于python - Pandas 连接/连接操作合一以连接数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055812/