python - Pandas 连接/连接操作合一以连接数据帧

标签 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 无论如何都无法实现该工作,因为它不是替换 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/

相关文章:

python - 如何用 Pandas 装箱花车列

python - 将列表的每个元素乘以一个数字

python - 取消隐藏和隐藏工作簿中的列

R匹配并替换数据框中的模式

python - 阅读 excel 框架时跳过特定的一组列 - pandas

python - 从多索引数据框中删除列

python - 使用集合和数据框计算唯一单词

python - Listener.join 和 Listener.start 之间的 Pynput 区别

python - 使用 .endswith(tuple) 测试时获取实际结尾

Python - 使用包含键的列表从字符串中创建字典