我有一个数据集,其中包含介于零和一之间的正值。我想获取每年每个月的平均值。如果我将枢轴方法与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
我做错什么了吗,或者可能是个错误?
我正在使用:
答案 0 :(得分:1)
我认为这不是错误,数据中只有负值。
您可以检查它们是否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