我想用时间索引捕获数据框的一列的整数。对于每个时间间隔进行的分组,这种方法都很好。
from scipy import integrate
>>> df
Time A
2017-12-18 19:54:40 -50187.0
2017-12-18 19:54:45 -60890.5
2017-12-18 19:54:50 -28258.5
2017-12-18 19:54:55 -8151.0
2017-12-18 19:55:00 -9108.5
2017-12-18 19:55:05 -12047.0
2017-12-18 19:55:10 -19418.0
2017-12-18 19:55:15 -50686.0
2017-12-18 19:55:20 -57159.0
2017-12-18 19:55:25 -42847.0
>>> integral_df = df.groupby(pd.Grouper(freq='25S')).apply(integrate.trapz)
Time A
2017-12-18 19:54:35 -118318.00
2017-12-18 19:55:00 -115284.75
2017-12-18 19:55:25 0.00
Freq: 25S, Name: A, dtype: float64
编辑:
scipy积分函数自动使用时间索引来计算其结果。
这不是事实。您必须将转换显式传递给np datetime,以便scipy.integrate.trapz使用时间正确地进行积分。请参阅我对这个问题的评论。
但是,我想取一个滚动积分。我已经尝试过Using rolling functions found on SO,但是当我尝试对集成函数进行输入时,代码变得混乱了,因为这些滚动函数不会返回数据帧。
如何随时间推移对其中一个数据框列的函数进行滚动积分?
答案 0 :(得分:2)
将时间设置为索引,并与df.rolling
一起应用
df.Time = pd.to_datetime(df.Time)
df = df.set_index('Time')
df.rolling('25S').apply(integrate.trapz)
#outputs:
2017-12-18 19:54:40 0.00
2017-12-18 19:54:45 -55538.75
2017-12-18 19:54:50 -100113.25
2017-12-18 19:54:55 -118318.00
2017-12-18 19:55:00 -126947.75
2017-12-18 19:55:05 -81986.75
2017-12-18 19:55:10 -53144.75
2017-12-18 19:55:15 -69992.00
2017-12-18 19:55:20 -115284.75
2017-12-18 19:55:25 -154710.00
这是A
和A-rolling-integrated
的情节: