2015-03-28 2 views
1

У меня есть dataframe, который выглядит следующим образом:Панды: с помощью GroupBy получить означает для каждой категории данных

>>> 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

Какой результат вы хотите получить? вы хотите получить среднее время или что? –

+1

Не могли бы вы привести пример DataFrame, который демонстрирует это? (Имена столбцов в вашем примере не совпадают.) Какую версию панд вы используете? –

+0

Как и Энди, ваши имена столбцов не совпадают. Я предполагаю, что testTime не является числовым. Проверьте свои типы –

ответ

3

Можете ли вы сделать 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 
2

Как уже упоминалось, вы не даете пример testTime и passing_site данных, но я предполагаю, что они чисел с плавающей ставкой. Как я уверен, вы можете себе представить, вы не можете группировать плавающие числа. Скорее, вам нужно будет группировать целые числа или категории определенного типа.

попробовать что-то вроде:

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

Вы группирование на «данных» и «категории», а затем вычисления среднего значения для численных столбцов «passing_site» и «testTime».