📜  pandas resample 回填 - Python (1)

📅  最后修改于: 2023-12-03 15:03:28.496000             🧑  作者: Mango

Pandas Resample 回填 - Python

在 Pandas 中使用resample()函数可以对时间序列数据进行重新采样,比如将分钟数据转化为小时数据等等。但是在一些情况下,我们需要把重新采样后的数据填充回原来的数据上(也就是所谓的回填)。本文将介绍如何使用 Pandas 实现这一过程。

准备工作

首先需要导入 Pandas 库:

import pandas as pd

下面我们创建一些样例数据:

index = pd.date_range('1/1/2020', periods=9, freq='T')
df = pd.DataFrame({'value': range(9)}, index=index)

这里我们创建了一个 9 行 1 列的 DataFrame,时间间隔为 1 分钟。数据如下:

                     value
2020-01-01 00:00:00      0
2020-01-01 00:01:00      1
2020-01-01 00:02:00      2
2020-01-01 00:03:00      3
2020-01-01 00:04:00      4
2020-01-01 00:05:00      5
2020-01-01 00:06:00      6
2020-01-01 00:07:00      7
2020-01-01 00:08:00      8
回填

假设我们现在要把数据按每 3 行重新采样,然后把重采样后的数据填充回原有数据上。我们可以先使用 resample() 函数来实现重采样:

resampled = df.resample('3T').sum()

这里的 sum() 函数表示对每个重采样窗口内的数据求和。得到的结果如下:

                     value
2020-01-01 00:00:00      3
2020-01-01 00:03:00     12
2020-01-01 00:06:00     15

接下来,我们需要把这些数据填充回原来的 DataFrame 上。这里我们可以使用 Pandas 的 reindex() 函数和 method='ffill' 参数来实现。

reindexed = resampled.reindex(df.index, method='ffill')

这里的 ffill 表示使用前向填充法填充数据。得到的结果如下:

                     value
2020-01-01 00:00:00      3
2020-01-01 00:01:00      3
2020-01-01 00:02:00      3
2020-01-01 00:03:00     12
2020-01-01 00:04:00     12
2020-01-01 00:05:00     12
2020-01-01 00:06:00     15
2020-01-01 00:07:00     15
2020-01-01 00:08:00     15

从上述结果可以看出,reindex() 函数将 resampled DataFrame 中的数据按原来的索引重新排列,并使用前向填充法填充数据。这样,就完成了回填的过程。

总结

在使用 Pandas 进行时间序列数据处理时,经常需要使用 resample() 函数对数据进行重采样。有时候,我们需要把重采样后的数据填充回原有数据上,这时可以使用 reindex() 函数和 method='ffill' 参数来实现回填操作。