Исторический средний в Пандас / Numpy - PullRequest
0 голосов
/ 28 сентября 2018

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

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

1 Ответ

0 голосов
/ 28 сентября 2018

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...