2013-09-16 6 views
21

Я загрузка CSV-файл, который имеет следующие столбцы: даты, textA, textB, numberA, numberBPandas - можно объединить два столбца с использованием двух разных агрегатов?

Я хочу группу столбцов: дата, textA и textB - но хочу применить «сумму «to numberA», но «min» - numberB.

data = pd.read_table("file.csv", sep=",", thousands=',') 
grouped = data.groupby(["date", "textA", "textB"], as_index=False) 

... но я не вижу, как применить два разных агрегатных функции к двум различным столбцам? I.e. sum(numberA), min(numberB)

ответ

28

Метод agg может принимать Dict, и в этом случае клавиши указывают столбец, к которому применяется функция:

grouped.agg({'numberA':'sum', 'numberB':'min'}) 

Например,

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 
         'foo', 'bar', 'foo', 'foo'], 
        'B': ['one', 'one', 'two', 'three', 
         'two', 'two', 'one', 'three'], 
        'number A': np.arange(8), 
        'number B': np.arange(8) * 2}) 
grouped = df.groupby('A') 

print(grouped.agg({ 
    'number A': 'sum', 
    'number B': 'min'})) 

дает

 number B number A 
A      
bar   2   9 
foo   0  19 

Это также показывает, что Pandas может обрабатывать пробелы в именах столбцов. Я не уверен, что происходило с проблемой, но буквальные пространства не должны были создавать проблемы. Если вы хотите исследовать это далее,

print(df.columns) 

без переназначения имен столбцов, покажет показать нам repr имен. Возможно, в названии столбца был труднодоступный символ, похожий на пробел (или какой-то другой символ), но на самом деле был u'\xa0' (NO-BREAK SPACE).

+0

спасибо - за быстрый ответ. Я пробовал это, но у меня есть элемент KeyError: u'no с именем KeyError: u'no item с именем Number A '" Возможно, это связано с тем, что мое имя столбца имеет пробел? Я буду экспериментировать, если это имеет значение –

+2

Woah, вы также можете делать такие вещи: 'g.agg ({'A': ['min', 'max'], 'B': 'mean' }) ' –

+0

Просто добавил параметр« names »в read_table и переименовал все мои столбцы, удалив любые пробелы в именах столбцов. Это сделало трюк - метод, который я ранее пытался (и предложил Энди), теперь работает. –

Смежные вопросы