Среднее значение в сводной таблице Pandas - PullRequest
1 голос
/ 20 сентября 2019

У меня есть набор данных положительных значений от нуля до единицы .Я хотел получить средние значения для каждого месяца в каждом году.Если я применяю метод pivot с aggfunc='mean', я получаю отрицательные значения, которые не могут быть правильными.

Мой фрагмент кода:

pv = pd.pivot_table(df_mb, index=df_mb.index.month, columns=df_mb.index.year, aggfunc='mean')


    2012        2013
1   -0.106180   0.021999
2   -0.089774   0.054606
3   -0.174909   0.027096
4   -0.062836   0.089484
5   -0.041830   0.103343
6   -0.138582   0.078373
7   -0.256108   -0.139217
8   -0.425878   -0.037988
9   -0.046610   -0.029985
10  -0.066550   0.158140
11  -0.100758   NaN
12  -0.043051   NaN

Я делаю что-то не так, или это так?может быть ошибка?

Я использую:

  • Python версия 3.7.3
  • Панда версия 0.24.2

1 Ответ

1 голос
/ 20 сентября 2019

Я думаю, что это не ошибка, только отрицательные значения в данных.

Вы можете проверить их, если df_mb равно Series:

print (df_mb[df_mb < 0])

Образец :

rng = pd.date_range('2012-04-03', periods=10, freq='2M')
df_mb = pd.Series([1,-2,5,4,8,6,-3,2,4,5], index=rng)  
#print (df_mb)

print (df_mb[df_mb < 0])
2012-06-30   -2
2013-04-30   -3
dtype: int64

df = df_mb.to_frame('data')
print (df)
            data
2012-04-30     1
2012-06-30    -2
2012-08-31     5
2012-10-31     4
2012-12-31     8
2013-02-28     6
2013-04-30    -3
2013-06-30     2
2013-08-31     4
2013-10-31     5

Или проверьте, если столбец data:

print (df[df['data'] < 0])
            data
2012-06-30    -2
2013-04-30    -3

Решение с одним столбцом DataFrame, потому что ваш код не работает в последней версии панд:

pv = df.pivot_table(index=df.index.month, 
                       columns=df.index.year, 
                       values = 'data', 
                       aggfunc='mean')
print (pv)
    2012  2013
2    NaN   6.0
4    1.0  -3.0
6   -2.0   2.0
8    5.0   4.0
10   4.0   5.0
12   8.0   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...