python - Pandas join/concat 操作合二为一以加入数据帧
问题描述
我有 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
's,而是创建另一列
>>> 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
推荐阅读
- enzyme - 反应:酶浅:“预期:1;收到:未定义
- c# - WordAddIn 获取文档句柄
- javascript - 无法使用 axios 获取linkedin 的访问令牌
- azure-functions - Azure 功能快速扩展超过 200 个实例
- html - HTML 和 CSS - 我无法删除边距
- npm - 在我的 windows10 上安装 create-react-app 的问题
- nginx - K8S Ingress 404 ssl 后端
- node.js - 添加 express-flash 中间件后 Express 服务器无法正常工作
- kubernetes - Kubernetes:打开/certs/tls.crt:没有这样的文件或目录
- javascript - 为什么 Web API 在 chrome 和 edge 等浏览器以及 Postman 工具中没有给出 CORS 错误?