Историческое среднее значение в Pandas / Numpy

У меня есть следующий фрейм данных 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 можно исправить :-))

Как мне получить желаемый результат?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте 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

Это великолепно! Спасибо!

unicorn80 28.09.2018 14:49

@jezrael, пожалуйста, чк stackoverflow.com/questions/52569194/…

pyd 29.09.2018 16:22

Другие вопросы по теме