合并列数据框

2024-01-12

我有以下数据框: df1

startTimeIso endTimeIso id
2023-03-07T03:28:56.969000 2023-03-07T03:29:25.396000 5
2023-03-07T03:57:08.734000 2023-03-07T03:59:08.734000 7
2023-03-07T04:18:08.734000 2023-03-07T04:20:10.271000 16
2023-03-07T07:58:08.734000 2023-03-07T07:58:10.271000 21

第二个:df2

startTimeIso endTimeIso value
2023-03-07T03:28:57.169000 2023-03-07T03:29:25.996000 true
2023-03-07T03:57:08.734000 2023-03-07T03:58:08.734000 true
2023-03-07T05:38:08.734000 2023-03-07T05:40:10.271000 true
2023-03-07T07:58:08.934000 2023-03-07T07:58:10.371000 true

我想检查 df2 中的行是否与 df1 中的行合并。可能有 1 秒的容差。应考虑 StartTimeIso 和 endTimeIso。

结果应该是这样的:df_merged

startTimeIso endTimeIso value startTimeIso_y endTimeIso_y id
2023-03-07T03:28:57.169000 2023-03-07T03:29:25.996000 true 2023-03-07T03:28:56.969000 2023-03-07T03:29:25.396000 5
2023-03-07T03:57:08.734000 2023-03-07T03:58:08.734000 true None None None
2023-03-07T05:38:08.734000 2023-03-07T05:40:10.271000 true None None None
2023-03-07T07:58:08.934000 2023-03-07T07:58:10.371000 true 2023-03-07T07:58:08.734000 2023-03-07T07:58:10.271000 21

找到的行数 = 2


一对一合并使用merge_asof

Use a merge_asof https://pandas.pydata.org/docs/reference/api/pandas.merge_asof.html with tolerance:

df1[['startTimeIso', 'endTimeIso']] = df1[['startTimeIso', 'endTimeIso']].apply(pd.to_datetime)
df2[['startTimeIso', 'endTimeIso']] = df2[['startTimeIso', 'endTimeIso']].apply(pd.to_datetime)

out = pd.merge_asof(
    df2.sort_values(by='startTimeIso'),
    df1.sort_values(by='startTimeIso')
       .rename(columns={'startTimeIso': 'startTimeIso_y'}),
    left_on='startTimeIso', right_on='startTimeIso_y',
    direction='nearest', tolerance=pd.Timedelta('1s'),
    suffixes=(None, '_y')
)

print(out)

Output:

             startTimeIso              endTimeIso  value            endTimeIso_y    id
0 2023-03-07 03:28:57.169 2023-03-07 03:29:25.996   True 2023-03-07 03:29:25.396   5.0
1 2023-03-07 03:57:08.734 2023-03-07 03:58:08.734   True 2023-03-07 03:58:08.734   7.0
2 2023-03-07 05:38:08.734 2023-03-07 05:40:10.271   True                     NaT   NaN
3 2023-03-07 07:58:08.934 2023-03-07 07:58:10.371   True 2023-03-07 07:58:10.271  21.0

如果您想考虑开始或结束,请执行两次合并并combine_first https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.combine_first.html:

out1 = pd.merge_asof(
    df2.sort_values(by='startTimeIso').reset_index(),
    df1.sort_values(by='startTimeIso')
       .rename(columns={'startTimeIso': 'startTimeIso_y'}),
    left_on='startTimeIso', right_on='startTimeIso_y',
    direction='nearest', tolerance=pd.Timedelta('1s'),
    suffixes=(None, '_y')
)

out2 = pd.merge_asof(
    df2.sort_values(by='endTimeIso').reset_index(),
    df1.sort_values(by='endTimeIso')
       .rename(columns={'endTimeIso': 'endTimeIso_y'}),
    left_on='endTimeIso', right_on='endTimeIso_y',
    direction='nearest', tolerance=pd.Timedelta('1s'),
    suffixes=(None, '_y')
)

out = out1.combine_first(out2).set_index('index')

print(out)

多对多合并使用numpy /questions/tagged/numpy

s1 = df1['startTimeIso'].to_numpy()[:,None]
s2 = df2['startTimeIso'].to_numpy()
e1 = df1['endTimeIso'].to_numpy()[:,None]
e2 = df2['endTimeIso'].to_numpy()

ms = abs(s1-s2) < pd.Timedelta('1s')
me = abs(e1-e2) < pd.Timedelta('1s')

idx1, idx2 = np.where(ms&me)

out = df2.join(df1.iloc[idx1].set_axis(df2.index[idx2])
                  .rename(columns={'startTimeIso': 'startTimeIso_y',
                                   'endTimeIso': 'endTimeIso_y'}))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并列数据框 的相关文章

随机推荐

  • 在 CodeIgniter 中实现 TinyMCE 的问题

    我正在尝试在 CodeIgniter 中实现 TinyMCE 我创建了一个视图文件并从控制器调用它 我已将所有文件上传到我的 CI 项目文件夹中并显示了文件的路径 但它不起作用 这是视图文件
  • YouTube 播放器在移动设备上几秒钟后停止

    我的移动网页中嵌入了 YouTube 视频 在桌面上 它可以正常播放 然而 在手机上 在 Android 上模拟 它会在一段时间后停止并抛出错误 当我在控制台中调试时 会生成以下错误 无法加载资源 net ERR FAILED XMLHtt
  • 使用 Spring Batch 依次链接两个作业的最佳方法

    我有两份工作 工作1 工作2 Job2 依赖于 job1 的结果 所以它必须等到 job 1 完成 我需要以某种方式链接它们 当 job1 完成时 它需要调用 job2 怎么做 使用tasklet到底会调用job2哪个 另一种方式可能是调用
  • 更快的 Aho-Corasick PHP 实现

    是否有有效的实施阿霍 科拉西克 http en wikipedia org wiki Aho E2 80 93Corasick string matching algorithm在 PHP 中 有一个PHP 中的 Aho Corasick
  • Android按钮setOnClickListener设计

    我正在构建一个 Android 应用程序 我注意到我在每个类中创建了许多与此类似的重复代码 Button buttonX Button findViewById R id buttonXName Register the onClick l
  • R 中一个 PDF 页面上的多个 hexbin 图

    我正在尝试创建一个包含多个内容的 PDFhexbin我希望每页有特定数量的绘图 这个有效 PDFPath C temp some pdf pdf file PDFPath par mfrow c 2 2 for i in seq 5 10
  • 如何在 Tkinter 消息窗口中自动滚动

    我编写了以下类 用于在额外的窗口中生成 监视 输出 不幸的是 它不会自动向下滚动到最新行 怎么了 因为我在 Tkinter 和 ipython 方面也有问题 qt4 的等效实现会是什么样子 这是代码 import Tkinter class
  • 在html/css中实现白色不透明效果

    有没有办法以跨浏览器兼容的方式实现这种效果 而无需准备单独的图像 基本上 文本所在的框架有一个不透明度为 50 的白色覆盖层 我想要一个除了背景之外不涉及创建任何其他图像的解决方案 但我不知道这是否可能 尝试 RGBA 例如 div bac
  • 如何在不同的文件中为 Angular JS 定义常量

    我想为我的 Angular JS 应用程序编写几个常量 我想将它们写在一个单独的文件中并想要访问它们 我尝试过像这样使用 IIFE 立即调用函数表达式 常量 js var Constants function var allConstant
  • 如何使用自定义资源的分数格式(即 X/Y)显示 kubectl 列

    在 Kubernetes 中 是否可以使用 CRD 的 additionalPrinterColumns 字段以分数格式 即 X Y 显示列 更准确地说 我想要kubectl使用与下面的 READY 字段相同的格式显示 CR 字段的描述 k
  • 如何修复“无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClass?

    我已经使用 java 16 启动了一个项目 但项目中到处都出现错误 An error has occurred See error log for more details Unable to make protected final ja
  • 修改用于查找和替换的 VBA 代码以循环访问多个工作表

    我有以下代码用于搜索工作表中名为 Front Wing 的一系列单元格 它将用 首字母缩略词 B 列中的单元格值替换与工作表中名为 首字母缩略词 A 列的值相匹配的任何单元格值 我有多个工作表 不仅仅是 Front Wing 所以我想修改此
  • 在 Spark 和 GraphX 中,通过取消持久图连接两个具有不同索引的 VertexPartition 速度很慢

    抱歉 标题不准确且较长 如果您能理解我在说什么 请帮我编辑它 谢谢 代码如下 如果你执行它 你将得到 14 06 12 14 33 24 WARN ShippableVertexPartitionOps Joining two Vertex
  • 在Python 3中打印列表中不是3的倍数的数字

    给定一个数字列表 你必须在 python 3 中打印那些不是 3 的倍数的数字 输入格式 第一行包含由空格分隔的数字列表 输出格式 将数字打印在一行中 并用空格分隔 且这些数字不是 3 的倍数 Example Input 1 2 3 4 5
  • 如何使用 parquet-cpp 编写流式/面向行的数据而不进行缓冲?

    我的 C 应用程序中基本上有面向行 流数据 Netflow 我想将数据写入 Parquet gzip 文件 看着示例 reader writer cc 程序 https github com apache parquet cpp blob
  • 如何在 Objective-C 中监听网络端口

    我正在尝试为 iPhone 制作一个应用程序 可以侦听特定网络端口上的流量 我网络上的服务器正在特定端口上发送消息 服务器处理的设备的不同状态消息 我的问题是 当我创建一个线程并 makePairWithSocket 时 我会阻止其他想要向
  • Actionscript-3和其他语言中存在接口的原因是什么

    这个接口的意义是什么 即使我们在一个类上实现一个接口 每次在不同的类上实现它时 我们都必须一次又一次地声明它的功能 那么接口存在于as3或任何其他具有接口的语言上的原因是什么 谢谢 我基本上同意到目前为止发布的答案 只是补充一点 首先回答简
  • 按名称返回所有因子水平作为三列 data.table [R] 中的新列

    有什么办法使用 data table 或 dplyr 来解决以下问题 library data table DT data table a LETTERS c 1 1 3 8 b c 2 4 7 c as factor c bob mary
  • 解码嗅探到的数据包

    我知道每个数据包都有一些标头 看起来像是字符的随机组合 另一方面 内容本身可以是纯 ascii 格式 因此它可能是人类友好的 我嗅探到的一些数据包是可读的 当然是原始的 html 标头 但有些数据包看起来像这样 0000 00 15 af
  • 合并列数据框

    我有以下数据框 df1 startTimeIso endTimeIso id 2023 03 07T03 28 56 969000 2023 03 07T03 29 25 396000 5 2023 03 07T03 57 08 73400