【问题标题】:Mean in Pandas Pivot tablePandas 数据透视表中的平均值
【发布时间】:2019-09-20 12:39:40
【问题描述】:

我有一个介于零和一之间的正值的数据集。我想获得每年每个月的平均值。如果我对 aggfunc='mean' 应用 pivot 方法,我会得到负值,这是不对的。

我的代码sn-p:

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

【问题讨论】:

  • 您也应该使用values 来确保您传递的是什么。您可以添加原始数据框的输出吗?旋转之前。

标签: python pandas pivot pivot-table


【解决方案1】:

我认为这不是错误,只是数据中的负值。

如果df_mbSeries,您可以检查它们:

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 的解决方案,因为您的代码在上一个 pandas 版本中不起作用:

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

【讨论】:

  • 是的,这就是问题所在。我监督了一些负面价值观,抱歉
猜你喜欢
  • 2019-10-05
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 2017-01-09
相关资源
最近更新 更多