在具有日期时间索引的行之间执行计算并将它们放入新列中

2023-12-23

我有一个数据框,由这段代码生成:

import pandas as pd
import datetime as dt

datarange=pd.date_range('01-05-2018 00:00:00', periods=50, freq="4H")
range_series_1=pd.Series(np.random.randint(-5,3,size=50).astype(float), index=datarange)
range_series_2=pd.Series(np.random.randint(5,9,size=50).astype(float), index=datarange)
frame=pd.DataFrame({'value1':range_series_1, 'value2':range_series_2})
frame.index.name='datetime'

我需要两个额外的列(例如“列 1”和“列 2”),它们承载以下计算:

第 1 列 = value1[每天 @ 4:00] - value1[同一天 @ 12:00] --> 该值应放置在当天的 00:00

第 2 列 = value1[每天 @ 4:00] - value2[同一天 @ 12:00] --> 该值应放置在当天的 00:00

第 1 列和第 2 列中的其余行应为 NaN 或 0。

请问有什么熊猫想法吗?

澄清的附加信息:我可能有一个数据框,它不会以如此严格的方式呈现此处的日期时间,所以pd.shift()可能不是一个全球性的解决方案。

所需输出的示例如下(带有更清晰的注释):

                     value1  value2  column1   column2
datetime                           
2018-01-05 00:00:00    -3.0     8.0      2.0      -8.0  #2.0=-3.0-(-5.0) and -8.0=-3.0-(5.0)   
2018-01-05 04:00:00    -3.0     8.0      NaN       NaN
2018-01-05 08:00:00     1.0     8.0      NaN       NaN
2018-01-05 12:00:00    -5.0     5.0      NaN       NaN
2018-01-05 16:00:00     0.0     5.0      NaN       NaN
2018-01-05 20:00:00    -4.0     8.0      NaN       NaN
2018-01-06 00:00:00    -5.0     8.0     -1.0     -11.0  #-1.0=-5.0-(-4.0) and -11.0=-5.0-(6.0)
2018-01-06 04:00:00    -5.0     5.0      NaN       NaN
2018-01-06 08:00:00    -2.0     5.0      NaN       NaN
2018-01-06 12:00:00    -4.0     6.0      NaN       NaN
2018-01-06 16:00:00    -1.0     6.0      NaN       NaN
2018-01-06 20:00:00     1.0     7.0      NaN       NaN
2018-01-07 00:00:00    -1.0     5.0      4.0      -4.0  #4.0=2.0-(-2.0) and -4.0=2.0-(6.0)
2018-01-07 04:00:00     2.0     8.0      NaN       NaN
2018-01-07 08:00:00    -1.0     8.0      NaN       NaN
2018-01-07 12:00:00    -2.0     6.0      NaN       NaN
2018-01-07 16:00:00     2.0     6.0      NaN       NaN
2018-01-07 20:00:00    -4.0     6.0      NaN       NaN

我想弄清楚这个答案是否可以帮助我,但我还不太熟悉迭代行(在逐行迭代时更新 pandas 中的数据框 https://stackoverflow.com/questions/23330654/update-a-dataframe-in-pandas-while-iterating-row-by-row?source=post_page-----a7b87c3748ea----------------------).


Use:

from datetime import time

np.random.seed(2019)

datarange=pd.date_range('01-05-2018 00:00:00', periods=50, freq="4H")
range_series_1=pd.Series(np.random.randint(-5,3,size=50).astype(float), index=datarange)
range_series_2=pd.Series(np.random.randint(5,9,size=50).astype(float), index=datarange)
frame=pd.DataFrame({'value1':range_series_1, 'value2':range_series_2})
frame.index.name='datetime'
#print (frame)

想法是比较索引和使用的时间DatetimeIndex.floor http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DatetimeIndex.floor.html用于删除时间(创建默认值00:00:00) 次Series and DataFrame:

s = frame.loc[frame.index.time == time(4, 0), 'value1']
s.index = s.index.floor('d')
print (s)
datetime
2018-01-05   -3.0
2018-01-06   -5.0
2018-01-07   -5.0
2018-01-08   -5.0
2018-01-09   -1.0
2018-01-10   -4.0
2018-01-11   -2.0
2018-01-12    0.0
2018-01-13    1.0
Name: value1, dtype: float64

df1 = frame.loc[frame.index.time == time(12, 0), ['value1', 'value2']]
df1.index = df1.index.floor('d')
print (df1)
            value1  value2
datetime                  
2018-01-05     0.0     6.0
2018-01-06     2.0     8.0
2018-01-07    -5.0     7.0
2018-01-08     2.0     7.0
2018-01-09    -1.0     5.0
2018-01-10     1.0     7.0
2018-01-11     2.0     7.0
2018-01-12    -2.0     6.0

然后从右侧减去DataFrame.rsub http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rsub.html,向新列添加一些前缀并连接到原始列:

frame = frame.join(df1.rsub(s, axis=0).add_prefix('new_'))
print (frame.head(15))
                     value1  value2  new_value1  new_value2
datetime                                                   
2018-01-05 00:00:00    -5.0     6.0        -3.0        -9.0
2018-01-05 04:00:00    -3.0     5.0         NaN         NaN
2018-01-05 08:00:00     2.0     7.0         NaN         NaN
2018-01-05 12:00:00     0.0     6.0         NaN         NaN
2018-01-05 16:00:00    -5.0     7.0         NaN         NaN
2018-01-05 20:00:00     1.0     6.0         NaN         NaN
2018-01-06 00:00:00     1.0     5.0        -7.0       -13.0
2018-01-06 04:00:00    -5.0     8.0         NaN         NaN
2018-01-06 08:00:00     0.0     6.0         NaN         NaN
2018-01-06 12:00:00     2.0     8.0         NaN         NaN
2018-01-06 16:00:00    -1.0     8.0         NaN         NaN
2018-01-06 20:00:00    -3.0     8.0         NaN         NaN
2018-01-07 00:00:00    -5.0     5.0         0.0       -12.0
2018-01-07 04:00:00    -5.0     8.0         NaN         NaN
2018-01-07 08:00:00     2.0     5.0         NaN         NaN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在具有日期时间索引的行之间执行计算并将它们放入新列中 的相关文章

  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 识别 pandas 数据框中各组之间的差异

    我有一个按日期和 ID 索引的 pandas 数据框 我想 识别日期之间增删的ID 将 ID 添加到另一个数据帧以及添加 删除的日期 date ID value 12 31 2010 13 0 124409 9 0 555959 1 0 7
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 使用连接字符串时如何设置 knex 连接 ssl 选项

    当我使用连接字符串初始化 knex 时 如何将连接的 ssl 属性设置为 true 同样如何将debug设置为true 我通常会传入一个连接对象 但在这种情况下 我必须使用环境变量中的连接字符串 var database client pg
  • 检测页面上是否显示警报或确认

    有没有办法使用 JavaScript 或 jQuery 来检测是否显示确认框或警报框 如果您想在以下情况下运行一些代码alert 火灾 你可以尝试这样的事情 我只在 Chrome 中进行了测试 所以我不确定浏览器是否支持 Example h
  • C++ 不会安装在 Netbeans 11.0 中

    我是编程初学者 想了解更多关于 C 的知识 我安装了 Netbeans 因为它说它支持 Java 我目前正在学校学习基础知识 和 C 我想出于个人兴趣学习 但是当我尝试创建一个新项目时 我找不到C 所以我按照教程并最终尝试安装该插件 问题是
  • 什么时候在 ThreadPoolExecutor 中指定单独的核心和最大池大小是个好主意?

    我试图理解为 Java 5 的 ThreadPoolExecutor 指定单独的核心和最大池大小的要点 我的理解是 线程数只有在队列已满时才会增加 这似乎有点晚了 至少对于较大的队列 难道我不乐意为任务分配更多数量的线程 在这种情况下我可能
  • 迷失在 NSButton 类型和替代图像中

    我想要一个NSButton带有图像和备用图像 按下按钮时应显示备用图像 我还想通过代码显示备用图像 调用类似 button setSelected YES 这是否可能无需与alternateImage用手财产 无需手动更改按钮的图像即可实现
  • Java:使用 SAXParser 拆分大型 XML 文件

    我正在尝试使用java将一个大的XML文件分割成更小的文件SAXParser 特别是维基百科转储 未压缩时大约有 28GB 我有一个Pagehandler扩展的类DefaultHandler private class PageHandle
  • 在Python中对两个文本文件进行类似SQL的JOIN,有内置的方法吗?

    我必须执行的一项常见任务是对两个文本文件执行类似 SQL 的 JOIN 即 使用在它们之间共享的标识符列上的某种联接 从 左手 和 右手 文件创建一个新文件 有时需要诸如外连接等变化 当然 我可以编写一个简单的脚本来以通用方式执行此操作 但
  • 时间序列预测(最终使用Python)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 What algorithms exist for time series forecasting r
  • 使用 Perl 使用 sendmail 发送电子邮件

    我正在遵循以下示例这个网站 http www tutorialspoint com perl perl sending email htm使用 Perl 发送电子邮件 代码看起来像这样 my hostname hostname my thi
  • Prometheus 中的increase() 有时会将值加倍:如何避免?

    我发现对于某些图表 我从 Prometheus 获得双精度值 其中应该只是一个 我使用的查询 increase signups count 4m 刮擦间隔设置为建议最大 https stackoverflow com questions 4
  • Zend_Search_Lucene 与 SOLR

    我最近偶然发现了 Lucene 项目的 Zend Lucene 端口 我对 SOLR 有一点经验 所以我想知道它们两者之间有什么区别 特别是从性能和安装方面来看 据我所知 SOLR 需要在 Web 托管中运行 Tomcat serverle
  • XCode 调试器停止并在“停止”按钮上显示 SIGKILL

    我在 MacOS Lion 上使用 XCode 4 2 在模拟器中调试 iPhone iPad 应用程序时 我使用 XCode 工具栏上的 停止 按钮 产品 停止 来退出应用程序 此后 XCode 通常会打开 main m 文件 将执行指针
  • 如何获取DataTables中的页数

    我正在与数据表 http datatables net index我需要知道表当前包含的页数 这当然取决于每页的行数和总行数 并且可能会因用户操作而改变 有人知道如何访问这个值吗 我相信 iTotalPages 就是您所追求的 http d
  • 如何在 Julia 中将 Float64 矩阵转换为 RGB 通道矩阵?

    假设我有以下矩阵 img 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 随机化字符串[重复]

    这个问题在这里已经有答案了 我是 C 新手 所以不要因为我的愚蠢而责怪我 我正在开发一个应用程序 该应用程序应该随机化一个单词并给出它的长度 例如您写一个单词 Line 它会给您 iLen 目前我确信只有这部分有效 private void
  • 单元测试中的序列化异常

    我的 Visual Studio 2010 单元测试遇到问题 每当出现问题并抛出一种类型的异常时 UnitTestAdapter 就会抛出 SerializationExceptions 告诉我他无法反序列化抛出的异常 在我创建的单元测试中
  • 如何获取使用 asp .net 检查的 gridview 内的复选框的值

    我在 gridview 中使用复选框 我在第一个单元格中使用它 当我在运行时选择复选框时 我需要获取这些值 但是在选择或单击复选框时 它不是查找或值取为 FALSE 如何在 asp net 后端和 C 代码中编写
  • git 错误:无法将一些引用推送到远程

    我现在无法推动 尽管昨天我可以做到 当我使用git push origin master 我收到错误 git remote v origin https github com REDACTED git fetch origin https
  • 我们到底为什么要使用NoSQL? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 了解了 NoSQL 提供的一些优势 可扩展性 可用性等 后 我仍然不清楚为什么网站想要使用非关系数据库 我可以在这方面获得一些帮助 最好是有一个
  • 在具有日期时间索引的行之间执行计算并将它们放入新列中

    我有一个数据框 由这段代码生成 import pandas as pd import datetime as dt datarange pd date range 01 05 2018 00 00 00 periods 50 freq 4H