2016-03-22 6 views
1

Определенные столбцы в моем кадре данных содержат кортежи. Всякий раз, когда я выполняю агрегацию через группу по этим столбцам, они не отображаются в результирующем фрейме данных, если явно не указано.Pandas tuples groupby aggregation

Пример,

df = pd.DataFrame() 
df['A'] = [1, 2, 1, 2] 
df['B'] = [1, 2, 3, 4] 
df['C'] = map(lambda s: (s,), df['B']) 
print df 
    A B  C 
0 1 1 (1,) 
1 2 2 (2,) 
2 1 3 (3,) 
3 2 4 (4,) 

Если я следующим образом, то столбец C не появляется в агрегации

print df.groupby('A').sum() 
    B 
A 
1 4 
2 6 

Но если указать это явно появляется, как ожидается,

print df[['A', 'C']].groupby('A').sum() 
     C 
A   
1 (1, 3) 
2 (2, 4) 

Не могли бы вы рассказать мне, почемуСтолбецне появился в первом случае?

Хотелось бы, чтобы это по умолчанию.

+0

вы не забыли 'C' как в' df.groupby ('A') [ 'C'] сумма() ' ? –

+0

Я мог бы определенно чего-то упустить, но я не знаю, что именно. Хорошо, позвольте мне добавить дополнительный столбец 'df ['D'] = [5, 6, 7, 8]'. Тогда я хотел бы получить вывод 'df.groupby ('A'). Sum()', чтобы иметь все три столбца 'B',' C' и 'D', но я получаю' B' и 'D' только не 'C'. – TruLa

ответ

1

Поскольку вы агрегировать по столбцам B, не колонке C:.

import pandas as pd 
import numpy as np 

df = pd.DataFrame() 
df['A'] = [1, 2, 1, 2] 
df['B'] = [1, 2, 3, 4] 
df['C'] = map(lambda s: (s,), df['B']) 
print df 

df.at[0,'B'] = 10 
print df 
    A B  C 
0 1 10 (1,) 
1 2 2 (2,) 
2 1 3 (3,) 
3 2 4 (4,) 

print df.groupby('A').sum() 
    B 
A  
1 13 
2 6 

print df.groupby('A')['B'].sum() 
1 13 
2  6 
Name: B, dtype: int64 
+0

Прости, я тебя не поймал. Я могу добавить дополнительный столбец 'df ['D'] = [5, 6, 7, 8]'. Вывод 'df.groupby ('A'). Sum()' содержит как 'B', так и' D', но не 'C'. Я хотел бы объединить все столбцы. – TruLa

+0

Столбец 'A' - это преобразованный индекс, поэтому агрегированным может быть столбец' B' и 'C'. Но столбец 'C' опущен, потому что groupby [' sum'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.sum.html) опускает некоторые столбцы. – jezrael

+1

Вы можете проверить http://wesmckinney.com/blog/groupby-fu-improvements-in-grouping-and-aggregating-data-in-pandas/, часть 'New: Опуская« неприятные »столбцы – jezrael