Pandas使用groupby获得每个数据类别的平均值

4

我有一个如下的数据框:

>>> df[['data','category']]
Out[47]: 
          data     category
  0       4610            2
 15       4610            2
 22       5307            7
 23       5307            7
 25       5307            7
...        ...          ...

数据和类别都是数值型,因此我可以这样做:

>>> df[['data','category']].mean()
Out[48]: 
data        5894.677985
category      13.805886
dtype: float64

我正在尝试获取每个类别的平均值。看起来很简单,但当我执行以下操作时:

>>> df[['data','category']].groupby('category').mean()

或者
>>> df.groupby('category')['data'].mean()

它会返回如下错误信息:
DataError: No numeric types to aggregate

如果我用.count()替换上述两个函数,就不会出现错误。
我做错了什么?获取每个类别的平均值的正确方法是什么?

1
你想要什么输出?你想要平均时间还是其他的? - Roman Pekar
1
你能提供一个演示这个的 DataFrame 的例子吗?(你的例子中列名不匹配。)你使用的 pandas 版本是什么? - Andy Hayden
就像Andy所说,你的列名不匹配。我猜testTime不是数字类型。请检查你的数据类型。 - Bob Haffner
2个回答

8

你能执行 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

5

如前所述,您没有提供testTime和passing_site数据的示例,但我猜测它们是浮点数。正如您所想象的那样,您不能对浮点数进行分组。相反,您需要对整数或某种类型的类别进行分组。

尝试类似以下的内容:

df.groupby(['data', 'category'])['passing_site', 'testTime'].mean()

您正在以“数据”和“类别”为分组依据,然后计算数值列“passing_site”和“testTime”的平均值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接