熊猫:使用groupby获取每个数据类别的均值

cah*_*hoy 3 python aggregate mean pandas

我有一个如下所示的数据框:

>>> df[['data','category']]
Out[47]: 
          data     category
  0       4610            2
 15       4610            2
 22       5307            7
 23       5307            7
 25       5307            7
...        ...          ...
Run Code Online (Sandbox Code Playgroud)

数据和类别都是数字,所以我能够这样做:

>>> df[['data','category']].mean()
Out[48]: 
data        5894.677985
category      13.805886
dtype: float64
Run Code Online (Sandbox Code Playgroud)

而我正试图获得每个类别的平均值.它看起来很直接,但当我这样做时:

>>> df[['data','category']].groupby('category').mean()
Run Code Online (Sandbox Code Playgroud)

要么

>>> df.groupby('category')['data'].mean()
Run Code Online (Sandbox Code Playgroud)

它返回如下错误:

DataError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)

如果我用上面的两个函数替换,则没有错误.count().

我做错了什么?获得每个类别的平均值的正确方法是什么?

Amr*_*ant 5

你能做一个df.dtypes吗?在下面的示例中,类型是Int,因为它工作正常.

    import pandas as pd

    ##group by 1 columns
    df = pd.DataFrame({' data': [4610, 4611, 4612, 4613], 'Category': [2, 2,    7, 7]})
    print df.groupby('Category'). mean()


    ##Mutiple columns to group by
    df1 = pd.DataFrame({' data': [4610, 4611, 4612, 4613], 'Category': [2,    2, 7, 7], 'Category2' : ['A','B','A','B']})
    key=['Category','Category2']
    print df1.groupby( key).mean()

 Category Category2       
 2        A           4610
          B           4611
 7        A           4612
          B           4613
Run Code Online (Sandbox Code Playgroud)


Ale*_*der 5

如前所述,您没有给出 testTime 和passing_site 数据的示例,但我猜测它们是浮动速率数字。我相信您可以想象到,您不能对浮点数进行分组。相反,您需要对某种类型的整数或类别进行分组。

尝试类似的东西:

df.groupby(['data', 'category'])['passing_site', 'testTime'].mean()
Run Code Online (Sandbox Code Playgroud)

您对“数据”和“类别”进行分组,然后计算数字列“passing_site”和“testTime”的平均值。