熊猫:在时间范围内使用先行滚动总和,时间而不是索引



假设我有以下数据帧:

data = {'measure_id': ['0', '1', '2', '3', '4'],
        'measure_time': ['2019-11-22 22:30:08.559000', '2019-11-22 22:36:09.149000', '2019-11-22 22:36:09.149000', '2019-11-22 22:40:09.261000', '2019-11-22 22:46:10.011000'],
        'pressure': [10, 9, 3, 11, 12]}
df = pd.DataFrame(data, columns=['measure_id', 'measure_time', 'pressure'])
df.set_index('measure_id', inplace=True)
print('df:n', df)

我需要计算每一行所有先行的时间滚动总和,这就是差异所在:

measure_time of current row - measure_time of precedent row

低于某个值(例如,假设 2 分钟(,即总和中包含的当前行。 这将在此处给出列rolling_sum:

data = {'measure_id': ['0', '1', '2', '3', '4'],
        'measure_time': ['2019-11-22 22:30:08.559000', '2019-11-22 22:36:09.149000', '2019-11-22 22:36:09.149000', '2019-11-22 22:40:09.261000', '2019-11-22 22:46:10.011000'],
        'pressure': [10, 9, 3, 11, 12],
        'rolling_sum':[10, 9, 12, 11, 12]}
df = pd.DataFrame(data, columns=['measure_id', 'measure_time', 'pressure', 'rolling_sum'])
df.set_index('measure_id', inplace=True)
print('df:n', df)

现在看来熊猫可以处理偏移的滚动 熊猫:按时间间隔滚动平均值 ,但我无法使这个解决方案在这里工作(可能是因为非时间索引(。

首先,您应该将measure_time列转换为日期类型:

df['measure_time'] = pd.to_datetime(df['measure_time'])

然后,您可以根据时差对此类列使用 rolling 方法,如下所示:

result_df = df.rolling('2s', on='measure_time').sum()
result_df
                   measure_time     pressure
measure_id                                  
0          2019-11-22 22:30:08.559      10.0
1          2019-11-22 22:36:09.149       9.0
2          2019-11-22 22:36:09.149      12.0
3          2019-11-22 22:40:09.261      11.0
4          2019-11-22 22:46:10.011      12.0

其中2s表示 2 秒窗口。

相关内容

最新更新