提问人:Euan 提问时间:10/27/2023 更新时间:10/27/2023 访问量:41
Pandas 对多通道数据进行重采样
pandas resample multi-channel data
问:
不确定这是多索引还是按问题分组。
给定下面的数据集 csv 示例:
'device','time','data'
1,2021-07-03 00:00:04,299
1,2021-07-03 00:02:34,300
1,2021-07-03 00:11:09,299
1,2021-07-03 00:13:38,299
1,2021-07-03 00:14:27,300
1,2021-07-03 00:19:25,300
1,2021-07-03 00:20:15,299
1,2021-07-03 00:20:23,300
2,2021-07-03 00:00:53,353
2,2021-07-03 00:07:34,352
2,2021-07-03 00:08:10,353
2,2021-07-03 00:12:27,352
2,2021-07-03 00:14:56,353
2,2021-07-03 00:17:00,352
2,2021-07-03 00:18:10,353
2,2021-07-03 00:19:27,352
2,2021-07-03 00:20:25,353
3,2021-07-03 00:07:44,336
3,2021-07-03 00:21:05,335
3,2021-07-03 00:21:54,336
4,2021-07-03 00:00:38,342
4,2021-07-03 00:02:19,343
4,2021-07-03 00:03:09,342
4,2021-07-03 00:22:46,343
我想以 5 分钟的间隔对每个设备的数据进行重新采样,在开始时进行正向填充和反向填充,理想情况下,所有设备都在特定时间开始,并且所有设备都同步到相同的时间戳(从 00:00 开始每 5 分钟一次),例如从午夜开始,并运行 24 小时。
我已经尝试了其他答案的所有这些迭代,但不确定我是否走上了正确的轨道:
- df = df.set_index('ts').groupby('device').resample('5T').ffill()
- df = df.groupby('device').apply(lambda x: x.set_index('ts').value.resample('5T').asfreq())
- df = df.set_index('ts').groupby('device').resample('5T').ffill().reset_index('ts')
数据需要在热图中呈现。我使用时间刻度和time_bucket功能与以前的数据库一起工作,但是现在我无法使用该数据库或扩展,需要在古老的 Postgres V9.3 上运行
任何帮助都非常感谢!
答:
2赞
Corralien
10/27/2023
#1
如果要创建热图,也许应该使用 。但是,您必须使用聚合函数来合并同一间隔的值(此处为平均值)pivot_table
piv = df.pivot_table(index='time', columns='device', values='data')
idx = pd.date_range(piv.index.min().normalize(), periods=288, freq='5T')
piv = piv.resample('5T').mean().reindex(idx).ffill().bfill()
输出:
>>> piv
device 1 2 3 4
2021-07-03 00:00:00 299.500000 353.000000 336.0 342.333333
2021-07-03 00:05:00 299.500000 352.500000 336.0 342.333333
2021-07-03 00:10:00 299.333333 352.500000 336.0 342.333333
2021-07-03 00:15:00 300.000000 352.333333 336.0 342.333333
2021-07-03 00:20:00 299.500000 353.000000 335.5 343.000000
... ... ... ... ...
2021-07-03 23:35:00 299.500000 353.000000 335.5 343.000000
2021-07-03 23:40:00 299.500000 353.000000 335.5 343.000000
2021-07-03 23:45:00 299.500000 353.000000 335.5 343.000000
2021-07-03 23:50:00 299.500000 353.000000 335.5 343.000000
2021-07-03 23:55:00 299.500000 353.000000 335.5 343.000000
[288 rows x 4 columns]
现在,您可以简单地使用来获取预期的数字。sns.heatmap(piv)
评论
1赞
Euan
10/29/2023
谢谢,这是一种享受。我从来没有想过先做一个透视,然后重新采样列。.
评论