Рассмотрим простой пример:
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
Спасибо!