我正在处理时间序列数据,我想对每个 Dataframe 块应用一个函数来滚动时间间隔/窗口。当我在Pandas DataFrame上使用rolling()
和apply()
时,它会对给定时间间隔的每列迭代应用该函数。以下是示例代码:
- 样本数据
在:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6],
'B': [2, 4, 6, 8, 10, 12]},
index=pd.date_range('2019-01-01', periods=6, freq='5T'))
print(df)
输出:
A B
2019-01-01 00:00:00 1 2
2019-01-01 00:05:00 2 4
2019-01-01 00:10:00 3 6
2019-01-01 00:15:00 4 8
2019-01-01 00:20:00 5 10
2019-01-01 00:25:00 6 12
- 组合使用rolling()和apply()时的输出:
在:
print(df.rolling('15T', min_periods=2).apply(lambda x: x.sum().sum()))
输出:
A B
2019-01-01 00:00:00 NaN NaN
2019-01-01 00:05:00 3.0 6.0
2019-01-01 00:10:00 6.0 12.0
2019-01-01 00:15:00 9.0 18.0
2019-01-01 00:20:00 12.0 24.0
2019-01-01 00:25:00 15.0 30.0
预期输出:
2019-01-01 00:00:00 NaN
2019-01-01 00:05:00 9.0
2019-01-01 00:10:00 18.0
2019-01-01 00:15:00 27.0
2019-01-01 00:20:00 36.0
2019-01-01 00:25:00 45.0
Freq: 5T, dtype: float64
目前,我使用for循环来完成这项工作,但我正在寻找一种更有效的方法来处理这项操作。如果您能在Pandas框架内甚至与其他库一起提供解决方案,我将不胜感激。
- 注意:请不要认真对待示例函数(summation),假设感兴趣的函数需要按原样迭代数据集块,即没有先前的列操作。*
先谢了!
1条答案
按热度按时间nc1teljy1#
您可以将apply()函数与自定义函数一起使用,该自定义函数将DataFrame作为参数并返回单个值。