在 Pandas 中重采样和进行线性插值

2023-12-03

我有一个数据,其中包含Id, DateTime and Value柱子。数据应该每 10 分钟收集一次。然而,有些数据的间隔超过 10 分钟(例如间隔超过 20 分钟、1 小时、2 小时)。收集一整月的数据。我想使用重新采样并在我的Value Column以便每一个Value columns包含固定时间间隔的数据(假设每 1 小时和(每周))。

这是我的样本数据

 Id DateTime              Value
20  2018-04-08 00:28:52     10
20  2018-04-08 00:38:34     11  
20  2018-04-08 00:48:57     9
20  2018-04-08 01:18:22     7   
............................
205  2018-04-08 01:08:28    11
205  2018-04-08 01:18:33    13
205  2018-04-08 01:27:22    8
205  2018-04-08 01:37:02    7
205  2018-04-08 01:56:44    6
205  2018-04-08 02:16:14    10

.....
2053  2018-04-08 02:06:03   11
2053  2018-04-08 02:17:10   12
2053  2018-04-08 02:26:33   8
2053  2018-04-08 02:36:53   9
2053  2018-04-08 03:26:33   13

有什么建议 ? 谢谢


我相信需要:

print (df)

      Id            DateTime  Value
0     20 2018-04-08 00:28:52     10
1     20 2018-04-08 00:38:34     11
2     20 2018-04-08 00:48:57      9
3     20 2018-04-08 01:18:22      7
4    205 2018-04-08 01:08:28     11
5    205 2018-04-08 01:18:33     13
6    205 2018-04-08 01:27:22      8
7    205 2018-04-08 01:37:02      7
8    205 2018-04-08 01:56:44      6
9    205 2018-04-08 02:16:14     10
10  2053 2018-04-08 10:06:03     11
11  2053 2018-04-08 10:17:10     12
12  2053 2018-04-08 10:26:33      8
13  2053 2018-04-08 10:36:53      9
14  2053 2018-04-08 10:26:33     13

df = df.set_index('DateTime')['Value'].resample('1H').mean().interpolate()
print (df)

DateTime
2018-04-08 00:00:00    10.000000
2018-04-08 01:00:00     8.666667
2018-04-08 02:00:00    10.000000
2018-04-08 03:00:00    10.075000
2018-04-08 04:00:00    10.150000
2018-04-08 05:00:00    10.225000
2018-04-08 06:00:00    10.300000
2018-04-08 07:00:00    10.375000
2018-04-08 08:00:00    10.450000
2018-04-08 09:00:00    10.525000
2018-04-08 10:00:00    10.600000
Freq: H, Name: Value, dtype: float64

EDIT:

If need resample每组还添加groupby with reindex对于同样的DatetimeIndex每个独特的Ids:

df = df.set_index('DateTime').groupby('Id')['Value'].resample('1H').mean()
mux = pd.MultiIndex.from_product([df.index.levels[0], pd.date_range(df.index.levels[1].min(), df.index.levels[1].max(), freq='h')])
df = df.reindex(mux)
df = df.groupby(level=0).apply(lambda x: x.interpolate())

print (df)

20    2018-04-08 00:00:00    10.0
      2018-04-08 01:00:00     7.0
      2018-04-08 02:00:00     7.0
      2018-04-08 03:00:00     7.0
      2018-04-08 04:00:00     7.0
      2018-04-08 05:00:00     7.0
      2018-04-08 06:00:00     7.0
      2018-04-08 07:00:00     7.0
      2018-04-08 08:00:00     7.0
      2018-04-08 09:00:00     7.0
      2018-04-08 10:00:00     7.0
205   2018-04-08 00:00:00     NaN
      2018-04-08 01:00:00     9.0
      2018-04-08 02:00:00    10.0
      2018-04-08 03:00:00    10.0
      2018-04-08 04:00:00    10.0
      2018-04-08 05:00:00    10.0
      2018-04-08 06:00:00    10.0
      2018-04-08 07:00:00    10.0
      2018-04-08 08:00:00    10.0
      2018-04-08 09:00:00    10.0
      2018-04-08 10:00:00    10.0
2053  2018-04-08 00:00:00     NaN
      2018-04-08 01:00:00     NaN
      2018-04-08 02:00:00     NaN
      ... 
      2018-04-08 07:00:00     NaN
      2018-04-08 08:00:00     NaN
      2018-04-08 09:00:00     NaN
      2018-04-08 10:00:00    10.6
Name: Value, dtype: float64

如果需要的话另一个解决方案interpolate每组分别:

df = (df.set_index('DateTime')
       .groupby('Id')['Value']
       .resample('1H')
       .mean()
       .groupby(level=0)
       .apply(lambda x: x.interpolate()))

print (df)


Id    DateTime           
20    2018-04-08 00:00:00    10.0
      2018-04-08 01:00:00     7.0
205   2018-04-08 01:00:00     9.0
      2018-04-08 02:00:00    10.0
2053  2018-04-08 10:00:00    10.6
Name: Value, dtype: float64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Pandas 中重采样和进行线性插值 的相关文章

随机推荐

  • 如何格式化数字 0..9 以显示 2 位数字(不是日期)

    我希望始终显示 100 以下的 2 位数字 例如 03 05 15 如何在不使用条件来检查 0 是否低于 10 的情况下附加 0 我需要将结果附加到另一个字符串 所以我不能使用 printf 您可以使用 String format 02d
  • SpriteKit - SKScene 边界不等于 SKView 边界

    最近我创建了一个新的 Xcode 游戏项目 我没有碰任何东西就运行了模板 我期待一个标准你好世界 应用程序 但我注意到一件事 我得到的不是充满背景的场景 而是场景cut在顶部和底部 我怎样才能让它充满整个屏幕 看起来默认的 SpriteKi
  • Flask - 将反馈数据存储到服务器

    我使用烧瓶应用程序作为服务器 我只是返回用户交易 但是 如果交易错误 我需要允许用户向服务器提供反馈 from flask import Flask render template request import pandas as pd p
  • 使用 Angular.js 版本 1.2.18 进行嵌套过滤

    我是第一次尝试 AngularJS 我确实重复了一个基于 JSON 数据的模板 这是一个示例 scope users name first user status name employee name second user status
  • 删除 matplotlib 图上的图例

    要将图例添加到 matplotlib 图中 只需运行legend How to remove情节中的传奇 我最接近的是运行legend 为了从数据中清空图例 但这会在右上角留下一个丑陋的白色矩形 As of 绘图库v1 4 0rc4 a r
  • 有关 SOLR 文档等的问题

    网站 分类广告网站 用户可以投放广告 搜索广告等 我打算使用SOLR进行搜索 然后仅以ID nr s返回结果 然后使用这些ID nr s查询mysql 最后用这些ID s显示结果 目前我在 MySQL 中有大约 30 个表 每个类别一个 1
  • 如何在 Windows 上将 UTF-8 字符串打印到 std::cout?

    我正在用 C 编写一个跨平台应用程序 所有字符串均在内部进行 UTF 8 编码 考虑以下简化代码 include
  • Angular 2 不使用 CORS 保存我的身份验证 Cookie

    我有一个 Angular 2 应用程序 它应该向 Node Express 后端进行身份验证 向后端发送登录请求并接收 cookie 它应该在每个连续请求中发送此 cookie 但事实并非如此 我的角度应用程序中有 class 登录服务 p
  • SCCM 不会更新手动安装的软件

    客户端计算机均为 Windows 10 专业版 64 位 如果我们有MyCompanyApp msi通过SCCM安装后 我们发现使用SCCM可以成功更新它 那里一切正常 然而 如果我要跑MyCompanyApp msi通过双击 MSI 或运
  • 在 wxPython 应用程序中实现我自己的事件循环

    我正在编写一个 wxPython 应用程序 它将进行大量的数据分析和显示 到目前为止 当两个线程尝试同时更改 GUI 中的某些内容时 我编写的方式会导致出现问题 我想做的是建立自己的在主线程上运行的简单队列这样我就可以确保 UI 更新一次发
  • 如何在Python中转换指数并去掉“e+”?

    我从 Python 开始 最近遇到了一个具有大值的数据集 我的一个字段有一个值列表 如下所示 1 3212724310201994e 18 注意e 18在数字的末尾 如何将其转换为浮点数并删除指数而不影响该值 首先 数量is已经是浮点数 您
  • 为什么我的 sizeWithFont:constrainedToSize:lineBreakMode: 总是返回零?

    我正在尝试制作一个 UITableViewCell 根据它显示的字符串的长度来调整其高度 但我对这种方法很着迷 这是我所得到的 NSString text A really long string in here CGSize theSiz
  • 当前曲目的音频信息 iOS Swift

    假设正在播放一首曲目 通过任何应用程序 我想获取歌曲信息 例如名称 当您锁定手机时 它会与专辑封面一起显示在屏幕上 我如何使用 swift 获取该信息 这是获取音频信息的示例函数 import MediaPlayer var url NSU
  • GridView 编辑按钮需要单击 2 次

    当按下 gridview 中的编辑按钮时 只有点击 2 次后才会显示编辑模板 另一个问题 要编辑的字段的值最初显示在 gridview 中 但不显示在编辑模板中 ASP代码
  • 更改几天前的 Php 日期

    我正在 Joumla 上使用一个组件 该组件返回以下格式的日期 2 个月零 6 天前 但我需要像这样显示日期 xx 秒前 或 xx 分钟前 或 xx 小时前 或 xx 天前 开发人员告诉我必须修改这段代码 但我对 Php 完全陌生 今天我一
  • 如何使用jtextfield搜索jtable中的数据?

    我在 netbeans 中创建 jtable 并在 jtable 中填充数据库中的数据 但我无法使用 jtextfield 在 jtable 中实现搜索选项 任何人都可以指导我吗 谢谢 为了搜索表格上的内容 您必须将原始内容存储在某个变量中
  • MongoDB 聚合 - 合并对象数组

    我想使用聚合框架获得 MongoDB 3 4 中对象中所有数组的并集 这是输入 id 001 name something important part foo 1 2 3 bar 4 5 x 6 7 这应该是输出 id 001 name
  • 更改 AlertDialog 按钮对齐方式

    为更改 AlertDialog support v7 之一 内按钮的对齐方式而奋斗了几个小时 因为它们不会根据区域设置视图方向自行对齐 尽管整个应用程序确实左对齐 AlertDialog 中的文本也左对齐 你说为什么会发生这种情况 我正在以
  • subprocess.Popen shell=True 到 shell=False

    我知道对子进程使用 shell True 是不好的做法 但是对于这行代码 我不确定如何使用 shell False 执行它 subprocess Popen candump tA can0 can1 gt gt s file name sh
  • 在 Pandas 中重采样和进行线性插值

    我有一个数据 其中包含Id DateTime and Value柱子 数据应该每 10 分钟收集一次 然而 有些数据的间隔超过 10 分钟 例如间隔超过 20 分钟 1 小时 2 小时 收集一整月的数据 我想使用重新采样并在我的Value