将 pandas 中一个时间序列的值替换为另一个时间序列的值

2024-03-24

我有两个数据框:

s1: 
         time     X1
0  1234567000  96.32
1  1234567005  96.01
2  1234567009  96.05

s2: 
         time     X2
0  1234566999  23.88
1  1234567006  23.96

我想用第二个 DataFrame 替换第一个时间序列/DataFrame 的值,同时保留时间戳,以获得:

frame: 
         time     X2
0  1234567000  23.88
1  1234567005  23.88
2  1234567009  23.96

输出 (frame)应该有时间戳s1但值s2. time是整数(不是 UNIX 时间戳)。X1 and X2是浮动的。

有没有什么巧妙的方法可以用熊猫做到这一点?


我目前使用外连接/合并+ fillna +内连接/合并+ del 列链,但这似乎效率不高。

from __future__ import print_function
import pandas as pd

def merge_dataframes(s1, s2, common_column, back_fill=False, verbose=False):
    if verbose: print('s1: \n{0}'.format(s1))
    if verbose: print('s2: \n{0}'.format(s2))
    frame = pd.merge(s1,s2,how='outer').sort_values(by=common_column)
    if verbose: print('frame: \n{0}'.format(frame))
    frame.fillna(method='ffill', inplace=True)
    if verbose: print('frame: \n{0}'.format(frame))
    frame = pd.merge(frame,s1,how='inner').sort_values(by=common_column)
    if verbose: print('frame: \n{0}'.format(frame))        
    for column_name in s1.columns:
        if (column_name not in common_column) and (column_name not in s2.columns):
            del frame[column_name]
    if back_fill:
        frame.fillna(method='bfill', inplace=True)
        if verbose: print('frame: \n{0}'.format(frame))            
    return frame

def main():
    '''
    Demonstrate the use of merge_dataframes(s1, s2, common_column)
    '''
    s1 = pd.DataFrame({
        'time':[1234567000,1234567005,1234567009],
        'X1':[96.32,96.01,96.05]
    },columns=['time','X1'])  

    s2 = pd.DataFrame({
        'time':[1234566999,1234567006],
        'X2':[23.88,23.96]
    },columns=['time','X2'])  

    common_column = 'time'
    frame = merge_dataframes(s1, s2, common_column, verbose=True)
    print('frame: \n{0}'.format(frame))

if __name__ == "__main__":
    main()
    #cProfile.run('main()') # if you want to do some profiling

这是我的解决方案,我分解了步骤。

过去仅第一次搜索:

M1=pd.DataFrame({},index=df1.time,columns=df2.time)
M1=M1.apply(lambda x:x.index-x.name)
del M1.index.name
M2=M1.stack().reset_index()
M2=M2.loc[M2[0]>=0,]
M2[0]=abs(M2[0])
M2=M2.sort_values(['level_0',0]).drop_duplicates(['level_0'],keep='first')
df1.merge(M2,left_on='time',right_on='level_0',how='left').merge(df2,left_on='time_y',right_on='time').loc[:,['time_x','X1','X2']]
       time_x     X1     X2
0  1234567000  96.32  23.88
1  1234567005  96.01  23.88
2  1234567009  96.05  23.96

第二次搜索全部:唯一不同的是M2=M2.loc[M2[0]>=0,]

M1=pd.DataFrame({},index=df1.time,columns=df2.time)
M1=M1.apply(lambda x:x.index-x.name)
del M1.index.name
M2=M1.stack().reset_index()
#M2=M2.loc[M2[0]>=0,]
M2[0]=abs(M2[0])
M2=M2.sort_values(['level_0',0]).drop_duplicates(['level_0'],keep='first')
df1.merge(M2,left_on='time',right_on='level_0',how='left').merge(df2,left_on='time_y',right_on='time').loc[:,['time_x','X1','X2']]



Out[173]: 
       time_x     X1     X2
0  1234567000  96.32  23.88
1  1234567005  96.01  23.96
2  1234567009  96.05  23.96

通过使用更新itertools product

from itertools import product
import pandas as pd
DF=pd.DataFrame(list(product(df1.time, df2.time)), columns=['l1', 'l2'])
DF['DIFF']=DF.l1-DF.l2
DF=DF.loc[DF.DIFF>=0,]
DF=DF.sort_values(['l1','DIFF']).drop_duplicates(['l1'],keep='first')
df1.merge(DF,left_on='time',right_on='l1',how='left').merge(df2,left_on='l2',right_on='time').loc[:,['time_x','X1','X2']]


Out[357]: 
       time_x     X1     X2
0  1234567000  96.32  23.88
1  1234567005  96.01  23.88
2  1234567009  96.05  23.96
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 pandas 中一个时间序列的值替换为另一个时间序列的值 的相关文章

  • 使用非负约束进行优化

    考虑以下功能 import numpy as np import scipy optimize as opt import math Periodic indexation def pl list i return list i len l
  • TypeError:无法在 re.findall() 中的类似字节的对象上使用字符串模式

    我正在尝试学习如何自动从页面获取网址 在下面的代码中 我试图获取网页的标题 import urllib request import re url http www google com regex r pattern re compile
  • OpenCV Python 和 SIFT 功能

    我知道有很多关于Python and OpenCV但我没有找到有关这个特殊主题的帮助 我想提取SIFT关键点来自 python OpenCV 中的图像 我最近安装了 OpenCV 2 3 可以访问 SURF 和 MSER 但不能访问 SIF
  • python-click:添加修改其他参数行为的选项

    这个问题是关于click http click pocoo org 5 包裹 Click 是一个用于创建漂亮命令行的 Python 包 使用尽可能少的代码以可组合的方式进行接口 它是 命令行界面创建工具包 它具有高度可配置性 但带有开箱即用
  • 如何在 Pandas 中将多列乘以一列

    我想拥有 df income 1 income 2 df mtaz proportion 返回这些列乘以df mtaz proportion 这样我就可以设置 df mtaz income 1 mtaz income 2 df income
  • Django 视图中的原始 SQL 查询

    我将如何使用原始 SQL 执行以下操作views py from app models import Picture def results request all Picture objects all yes Picture objec
  • 正则表达式 - Python - 删除前导空格

    我使用正则表达式在文本文件中搜索 产品 一词 然后 我使用该搜索的起点和终点来查看该列并提取整数 有些实例 A 列 有我不想要的前导空格 我只想将数字 如 B 列中的数字 打印到文件中 没有前导空格 正则表达式中的正则表达式 有条件的 pr
  • 如何从包含许多表的 Excel 工作表中解析数据帧(使用 Python,可能使用 Pandas)

    我正在处理布局糟糕的 Excel 工作表 我正在尝试解析这些工作表并将其写入数据库 每个工作表可以有多个表 尽管这些可能的表格的标题是已知的 但哪些表格将位于任何给定的工作表上 它们在工作表上的确切位置也不是已知的 表格不以一致的方式对齐
  • 如何使用 Anaconda Python 执行 .py 文件?

    我刚刚在我的 Windows 计算机上下载并安装了 Anaconda 但是 我在使用命令提示符执行 py 文件时遇到问题 如何让我的计算机了解 python exe 应用程序位于 Anaconda 文件夹中 以便它可以执行我的 py 文件
  • Python 的最佳实践:assert command() == False [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将误差线添加到 3D 绘图

    我找不到在 matplotlib 的 3D 散点图中绘制误差条的方法 基本上 对于以下代码段 from mpl toolkits mplot3d import axes3d import matplotlib pyplot as plt f
  • 使用 pywin32com 进行 opc 的内存泄漏

    我很难弄清楚如何解决内存泄漏问题 我认为这可能是 pywin32 的问题 但我不完全确定 我用于读取 写入单个项目的代码似乎工作得很好 但是当使用组函数时 它会慢慢泄漏内存 我怀疑这是来自必须在 server handles 中传递的基于
  • kombu.exceptions.EncodeError:用户不可 JSON 序列化

    我有 django 1 11 5 应用程序和 celery 4 1 0 我一直收到 kombu exceptions EncodeError
  • API 调用时出现 UnicodeEncodeError (json)

    我正在尝试打印此 API 调用的结果 但收到 UnicodeEncodeError 可能是超级菜鸟问题 但非常感谢任何帮助 import http client import json api key hidden connection h
  • 为什么 `Pool.map()` 多处理中的内存消耗急剧增加?

    我正在对 pandas 数据帧进行多重处理 方法是将其拆分为多个数据帧 这些数据帧存储为列表 并且 使用Pool map 我将数据帧传递给定义的函数 我的输入文件约为 300 mb 因此小数据帧大约为 75 mb 但是 当多处理运行时 内存
  • 如何在seaborn displot上绘制正态曲线

    distplot 已被弃用 取而代之的是 displot 之前的函数可以选择绘制正态曲线 import seaborn as sns import matplotlib pyplot as plt from scipy import sta
  • 在 django 视图中执行阻塞请求

    在我的 django 应用程序的一个视图中 我需要执行相对较长的网络 IO 操作 问题是其他请求必须等待该请求完成 即使它们与该请求无关 我做了一些研究并偶然发现了 Celery 但据我了解 它用于执行独立于请求的后台任务 所以我不能使用任
  • 在ActivePython-2.6中安装pyCurl?

    我过去曾使用过 pyCurl 并让它与我的系统默认 python 安装一起使用 但是 我有一个项目需要 python 更具可移植性 并且我正在使用 ActivePython 2 6 到目前为止 我安装任何其他模块都没有问题 但安装 pyCu
  • 为什么 Pytest 对夹具参数执行嵌套循环

    使用 Pytest 我想编写一个测试函数 该函数接受多个装置作为参数 每个灯具都有几个参数 例如 test demo py 中是一个函数test squared is less than 10需要固定装置 negative integer
  • 通过 subprocess.communicate 在 python 脚本之间传输 pickled 对象输出

    我有两个 python 脚本 object generator py 它会腌制给定的对象并打印它 另一个脚本 object consumer py 通过 subprocess communicate 选择第一个脚本的输出 并尝试使用 pic

随机推荐

  • 为什么函数返回 nil FireBase Swift [重复]

    这个问题在这里已经有答案了 为什么函数会返回 nil 我尝试添加 DispathQue 但我不明白它应该如何正确 请帮忙 func storagePutData uid String image UIImage compretition e
  • Spring 中的 Hibernate 事务管理器配置

    在我的项目中 我使用 Hibernate 进行编程事务划分 每次在我的服务方法中我都会写类似的东西 Session session HibernateUtil getSessionFactory openSession session be
  • 这样做的目的是什么(MyJobject as ILocalObject).GetObjectID

    在delphi Tokyo源代码中 我看到这两种不同的方式来检索 服务经理 var FLocationManager JLocationManager FLocationManager TJLocationManager Wrap TAnd
  • express-jwt 不尊重未受保护的路径

    有关express jwt模块的信息可以在这里找到 https github com auth0 express jwt https github com auth0 express jwt https www npmjs com pack
  • 让笑话在故事书中全球可用

    我在用 storybook react 6 in a create react app项目 我对所有商店 对象等进行了数千次测试和模拟 这些模拟利用jest fn 我想在我的故事书故事中重复使用这些模拟 但它说jest is not def
  • neo4j 使用选项卡加载 CSV

    我正在尝试使用以下命令加载 csv 并在 neo4j 2 1 0 中创建节点 使用定期提交 从 file c temp listings TXT 加载 CSV AS 行 FIELDTERMINATOR t CREATE p person i
  • mmap 与 fileinput 的优点

    我读到 mmap 比 fileinput 有优势 因为它会将页面读入内核页面缓存并在用户地址空间中共享该页面 而 fileinput 实际上将一个页面带入内核并将一行复制到用户地址空间 因此 文件输入会产生额外的空间开销 所以 我打算转向
  • 如何在 PostgreSQL 的函数内编写WITH(CTE)

    我正在尝试使用 WITH 它是 PostgreSQL 函数中的公共表表达式 以下是示例 Example Create or replace function withFunction returns void as Body Begin W
  • 变换比例导致间隙/线条

    我目前正在构建一个网站 但遇到了问题transform scale 我有一个按钮 当用户将鼠标悬停在它上面时 会发生两件事 背景沿对角线 扫过 按钮标签颜色改变 按钮稍微变大 我已经完成了这个工作 看起来非常好 但是在实施之后3 当按钮变大
  • dlclose 上不会调用共享库中全局静态变量的析构函数

    在主程序中 我dlopen and dlclose LoadLibrary and FreeLibrary分别 一个共享库 共享库包含一个实例化的静态变量dlopen 并销毁于dlclose 此行为在 MSVC 2008 和 2013 GC
  • 如何分割逗号分隔的字符串,同时忽略转义逗号?

    我需要编写 StringUtils commaDelimitedListToStringArray 函数的扩展版本 它获取一个附加参数 转义字符 所以打电话给我的 commaDelimitedListToStringArray test t
  • Docker 用户无法写入已安装的文件夹

    我有以下设置 selenium chrome image selenium node chrome debug 3 141 59 neon container name chrome e2e depends on selenium hub
  • 如何在 Cloudformation 模板中使列表项成为条件?

    我有以下创建代码管道的云形成模板 该管道分为三个阶段 Stages Name Source Actions Name Source ActionTypeId Category Source Owner ThirdParty Version
  • 如何在tf-slim中使用evaluation_loop和train_loop

    我正在尝试实现一些不同的模型并在 CIFAR 10 上训练它们 我想使用 TF slim 来做到这一点 看起来 TF slim 有两个在训练期间有用的主要循环 train loop 和 evaluation loop 我的问题是 使用这些循
  • mod_deflate 与 Django GZipMiddleware,使用哪一个进行部署?

    我们正在使用 Apache 2 2 mod wsgi 部署 Django 应用程序 我们应该在 Apache 中启用 mod deflate 还是使用 Django 的 GZipMiddleware 哪个选项表现更好 你可能应该测试一下才能
  • Directory.GetFiles 查找不存在的文件

    我刚刚偶然发现了一个没有记录的行为GetFiles中的方法System IO Directory 每当searchPattern传递给该方法的参数包含保留的 Windows 设备名称 例如 nul or aux bmp 该方法返回一个包含不
  • 在android中将图像和视频发送到服务器

    我正在创建一个用于拍摄照片和视频的 Android 应用程序 捕获图像后 我想将带有日期和一些文本的图像发送到网络服务器 在服务器端 我正在使用这些图片和视频制作一个应用程序 拍摄的图像将保存在存储卡中 如何使用 JSON 发送带有文本的图
  • 如何获取Jupyter Notebook的路径?

    有没有获取Notebook路径的函数 我在谷歌上搜索了一些关于这个主题的信息 但没有找到一个简单的方法 我想获得笔记本的路径 这样我就可以在其他地方使用它 这样我就可以在与笔记本相同的路径中保存 使用文件 而不必担心它的保存位置 现在我的解
  • 如何在没有机器人的情况下在node.js中接收我自己的电报消息

    我想在nodejs 一个例子 中有一个非常简单的客户端 它可以接收来自我的电报联系人的消息 我刚刚在互联网上搜索 但只得到了机器人样本 我想接收群组消息 但我无权向我的机器人授予权限 因此我想知道我是否可以在没有机器人作为中介的情况下接收自
  • 将 pandas 中一个时间序列的值替换为另一个时间序列的值

    我有两个数据框 s1 time X1 0 1234567000 96 32 1 1234567005 96 01 2 1234567009 96 05 s2 time X2 0 1234566999 23 88 1 1234567006 2