pandas 重新采样多通道数据

问题描述 投票:0回答:1

不确定这是多索引还是分组问题。

给出下面的数据集 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小时运行。

我已经尝试了其他答案中的所有这些迭代,但不确定我是否走在正确的道路上:

  1. df = df.set_index('ts').groupby('device').resample('5T').ffill()
  2. df = df.groupby('device').apply(lambda x: x.set_index('ts').value.resample('5T').asfreq())
  3. df = df.set_index('ts').groupby('device').resample('5T').ffill().reset_index('ts')

数据需要在热图中呈现。我使用 timescale 和 time_bucket 功能与以前的数据库一起工作,但是现在我无法使用该数据库或扩展,并且需要在古老的 Postgres V9.3 上运行

非常感谢任何帮助!

pandas multi-index resample
1个回答
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)
即可获得预期的数字。

© www.soinside.com 2019 - 2024. All rights reserved.