gpt4 book ai didi

python - 最后 2 秒的滚动总和

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:58 25 4
gpt4 key购买 nike

考虑这个简单的例子:

df = pd.DataFrame({'mytime' : [pd.to_datetime('2018-01-01 14:34:12.340'),
pd.to_datetime('2018-01-01 14:34:13.0'),
pd.to_datetime('2018-01-01 14:34:15.342'),
pd.to_datetime('2018-01-01 14:34:16.42'),
pd.to_datetime('2018-01-01 14:34:28.742')],
'myvalue' : [1,2,np.NaN,3,1],
'mychart' : ['a','b','c','d','e']})

df.set_index('mytime', inplace = True)
df
Out[142]:
mychart myvalue
mytime
2018-01-01 14:34:12.340 a 1.0
2018-01-01 14:34:13.000 b 2.0
2018-01-01 14:34:15.342 c NaN
2018-01-01 14:34:16.420 d 3.0
2018-01-01 14:34:28.742 e 1.0

在这里,我想使用 rolling 来计算 myvalue最后 2 秒内的滚动总和。

是的,最后两秒,不是最后两次观察:)

这应该可以工作,但是两个相似的调用给出了不同的结果

df['myrol1'] = df.myvalue.rolling(window = '2s', closed = 'right').apply(lambda x: x.sum())
df['myrol2'] = df.myvalue.rolling(window = '2s', closed = 'right').sum()

df
Out[152]:
mychart myvalue myrol1 myrol2
mytime
2018-01-01 14:34:12.340 a 1.0 1.0 1.0
2018-01-01 14:34:13.000 b 2.0 3.0 3.0
2018-01-01 14:34:15.342 c NaN NaN NaN
2018-01-01 14:34:16.420 d 3.0 NaN 3.0
2018-01-01 14:34:28.742 e 1.0 1.0 1.0

这里的apply是怎么回事?任何使用 apply 的东西在这里似乎都是错误的。例如:

df.mychart.rolling(window = '2s', closed = 'right').apply(lambda x: ' '.join(x))
Out[160]:
mytime
2018-01-01 14:34:12.340 a
2018-01-01 14:34:13.000 b
2018-01-01 14:34:15.342 c
2018-01-01 14:34:16.420 d
2018-01-01 14:34:28.742 e
Name: mychart, dtype: object

谢谢!

最佳答案

您可能需要检查 np.nansum

df.myvalue.rolling(window = '2s', closed = 'right').apply(lambda x: np.nansum(x))
Out[248]:
mytime
2018-01-01 14:34:12.340 1.0
2018-01-01 14:34:13.000 3.0
2018-01-01 14:34:15.342 NaN
2018-01-01 14:34:16.420 3.0
2018-01-01 14:34:28.742 1.0
Name: myvalue, dtype: float64

因为原始值中有 NaN,简单的 sum 将返回 NaN

np.sum([0.5, np.nan])
Out[249]: nan
np.nansum([0.5, np.nan])
Out[250]: 0.5

关于python - 最后 2 秒的滚动总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com