Проблема с вашими данными заключается в неравном временном шаге.
import pandas as pd
# Create your dataset
index = pd.date_range('2000/01/01 00:00:00', periods=4, freq='min').to_list()
index[1] = pd.Timestamp('2000/01/01 00:00:10')
values = [0., 100., 100., 200.]
data = pd.Series(values, index)
data
[Out]:
2000-01-01 00:00:00 0.0
2000-01-01 00:00:10 100.0
2000-01-01 00:02:00 100.0
2000-01-01 00:03:00 200.0
Когда вы звоните .resample()
, вот что происходит:
data.asfreq('T')
[Out]:
2000-01-01 00:00:00 0.0
2000-01-01 00:01:00 NaN
2000-01-01 00:02:00 100.0
2000-01-01 00:03:00 200.0
Значения помещаются в соответствующие минуты , поскольку между 1мин и 2мин нет данных, значение заполняется NaN
. .mean()
не делает ничего полезного (он превращает объект генератора в df / series).
Вы можете выполнить повторную выборку до 10 секунд, выполнить прямую заливку и затем повторную выборку до 1 минуты.
print(data.resample('10s').ffill())
[Out]:
2000-01-01 00:00:00 0.0
2000-01-01 00:00:10 100.0
2000-01-01 00:00:20 100.0
2000-01-01 00:00:30 100.0
2000-01-01 00:00:40 100.0
2000-01-01 00:00:50 100.0
2000-01-01 00:01:00 100.0
2000-01-01 00:01:10 100.0
2000-01-01 00:01:20 100.0
2000-01-01 00:01:30 100.0
2000-01-01 00:01:40 100.0
2000-01-01 00:01:50 100.0
2000-01-01 00:02:00 100.0
2000-01-01 00:02:10 100.0
2000-01-01 00:02:20 100.0
2000-01-01 00:02:30 100.0
2000-01-01 00:02:40 100.0
2000-01-01 00:02:50 100.0
2000-01-01 00:03:00 200.0
print(data.resample('10s').ffill().resample('1t').mean())
[Out]:
2000-01-01 00:00:00 83.333333
2000-01-01 00:01:00 100.000000
2000-01-01 00:02:00 100.000000
2000-01-01 00:03:00 200.000000
В вашем вопросе вы ожидаете, что результат между 2 минутами и 3 минутами будет 150, но это не будет так, поскольку у вас есть значение 100 для всей этой минуты.
Возможно, вы найдете .interpolate(method='time')
полезно. Вот ссылка на документы .