【发布时间】:2018-12-18 14:19:04
【问题描述】:
我想用时间索引捕获我的数据框列的积分。这适用于每个时间间隔发生的分组。
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,但是当我试图锻炼我对集成函数的输入时,代码变得很乱,因为这些滚动函数不返回数据帧。
如何对我的数据框列之一的函数进行滚动积分?
【问题讨论】:
-
什么对我有用:
df.rolling(10).apply(lambda g: integrate.trapz(g, g.index.astype(np.int64) / 10**9), raw=False)
标签: pandas numpy scipy pandas-groupby