Я думаю, что это не ошибка, только отрицательные значения в данных.
Вы можете проверить их, если 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