У меня есть следующий фрейм данных Panda (df):
2013-01-01 7
2013-01-02 4
2013-01-02 8
2013-01-08 8
2013-01-11 10
2013-01-12 7
Основываясь на этих числах (на самом деле, об оценках в школе), я хотел бы построить график, отображающий среднее за прошлое время.
Желаемый результат:
2013-01-01 7.000000
2013-01-02 6.333333
2013-01-03 6.333333
2013-01-04 6.333333
2013-01-05 6.333333
2013-01-06 6.333333
2013-01-07 6.333333
2013-01-08 6.750000
2013-01-09 6.750000
2013-01-10 6.750000
2013-01-11 7.400000
2013-01-12 7.333333
df.expanding().mean() дает мне:
2013-01-01 7.000000
2013-01-02 5.500000
2013-01-02 6.333333
2013-01-08 6.750000
2013-01-11 7.400000
2013-01-12 7.333333
это то, что приближается, но я хочу, чтобы даты были между ними.
Если я сделаю resample в интервале 1d (т.е. df.expanding().mean().resample("1d").mean()), я получу следующее:
2013-01-01 7.000000
2013-01-02 5.916667
2013-01-03 NaN
2013-01-04 NaN
2013-01-05 NaN
2013-01-06 NaN
2013-01-07 NaN
2013-01-08 6.750000
2013-01-09 NaN
2013-01-10 NaN
2013-01-11 7.400000
2013-01-12 7.333333
Проблема здесь в неуникальном индексе (дважды 2013-01-02). (NaN можно исправить :-))
Как мне получить желаемый результат?






Используйте Resampler.last для последнего значения повторяющихся дат и времени, а затем замените отсутствующие строки прямым заполнением:
s = df.expanding().mean().resample("1d").last().ffill()
print (s)
2013-01-01 7.000000
2013-01-02 6.333333
2013-01-03 6.333333
2013-01-04 6.333333
2013-01-05 6.333333
2013-01-06 6.333333
2013-01-07 6.333333
2013-01-08 6.750000
2013-01-09 6.750000
2013-01-10 6.750000
2013-01-11 7.400000
2013-01-12 7.333333
Freq: D, Name: A, dtype: float64
@jezrael, пожалуйста, чк stackoverflow.com/questions/52569194/…
Это великолепно! Спасибо!