2015-03-26 3 views
2

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

id, a, b, c 
1, 10, 10, 10 
1, 20, 20, 20 
2, 10, 10, 10 
2, 20, 20, 20 
3, 10, 10, 10 
3, 20, 20, 20 

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

grouped = df.groupby('id') 
grouped['a','b','c'].apply(lambda x,y,z:x*y+z) 

Но вторая линия ошибка:

KeyError: ('a', 'b', 'c'). 

Как это получить?

ответ

2

Ваша попытка поднимает KeyError, потому что это не в состоянии решить эту проблему в выборе колонки, как вы обычно думаете, он делает, в то время как df.groupby('id')['a'].head() работ, df.groupby('id')['a','b'].head() также поднять KeyError. Чтобы выбрать столбцы, представляющие интерес, то необходимо предоставить список столбцов, представляющих интерес для subsript оператора следующим образом:

In [163]: 

df.groupby('id')[['a','b','c']].apply(lambda x: x['a']*x['b']*x['c']) 
Out[163]: 
id 
1 0 1000 
    1 8000 
2 2 1000 
    3 8000 
3 4 1000 
    5 8000 
dtype: int64 

EDIT

Для дальнейшего освещения, почему он, как правило, кажется разумным, чтобы выполнить столбец выбор, как вы сделали, если мы ссылаемся на docs, мы видим, что

df.groupby('id')['a'] 

является синтаксический сахар для более многословен:

df['a'].groupby('id') 

Так что, если мы попробуем это:

df['a','b'] 

это также поднимет KeyError, в то время как это не делает:

df[['a','b']] 
+0

Если бы такое же решение в виду, но я все еще получаю 'KeyError : «Столбцы не найдены:« a »,« c »,« b ». pandas 0.15.2 – Primer

+0

@Primer вы правильно разобрали входные данные OP? Проверьте, соответствует ли ваш выбор столбца выводам из 'df.columns', я на' 0.16.0', но это не должно иметь значения. – EdChum

+0

Спасибо, кровавые пространства испортили его. Это действительно работает. – Primer

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