假设我有以下数据帧:
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 秒窗口。