Что это лучший способ, чтобы сделать groupBy на одной панды фрейма данных, но исключить некоторые столбцы из этого метода groupBy? например, у меня есть следующие таблицы данных:
нет Страна Код Товара Блок Item_Code Ele_Code Y1961 Y1962 Y1963 2 Афганистан 15 Пшеницы 5312 Га 10 20 30 2 Афганистан 25 Кукурузы 5312 Га 10 20 30 4 Ангола 15 Пшеницы 7312 Га 30 40 50 4 Анголе 25 Кукурузы 7312 Га 30 40 50 `` Я хочу, чтобы метод groupBy графе Страна и Item_Code и только вычислить сумму строк, попадающих под колонны Y1961, Y1962 и Y1963. Результирующие таблицы данных должна выглядеть следующим образом:
нет
Страна Код Товара Блок Item_Code Ele_Code Y1961 Y1962 Y1963
2 Афганистан 15 С3 5312 Га 20 40 60
4 Анголе 25 С4 7312 Га 60 80 100
``
Прямо сейчас я делаю это:
df.groupby('Country').sum()
Однако это сложение значений в столбце Item_Code, а также. Есть ли способ я могу указать, какие столбцы следует включить в сумму операции ()`, а какие исключить?
Вы можете выбрать столбцы метода groupBy:
In [11]: df.groupby(['Country', 'Item_Code'])[["Y1961", "Y1962", "Y1963"]].sum()
Out[11]:
Y1961 Y1962 Y1963
Country Item_Code
Afghanistan 15 10 20 30
25 10 20 30
Angola 15 30 40 50
25 30 40 50
Обратите внимание, что прошло списке должны быть подмножеством столбцов, в противном случае вы'll увидеть KeyError.
Функция агг
будет делать это за вас. Проходят колонны и функционировать как дикт с колонкой, вывод:
df.groupby(['Country', 'Item_Code']).agg({'Y1961': np.sum, 'Y1962': [np.sum, np.mean]}) # Added example for two output columns from a single input column
Это будет отображать только группы по столбцам, и указанной совокупности столбцов. В этом примере я включил две функции агг применяется к 'Y1962'.
Чтобы получить именно то, что вы надеялись увидеть, включить другие столбцы в группе, и применить сумм к y переменные в кадре:
df.groupby(['Code', 'Country', 'Item_Code', 'Item', 'Ele_Code', 'Unit']).agg({'Y1961': np.sum, 'Y1962': np.sum, 'Y1963': np.sum})
Если вы ищете более универсальный способ применим ко многим колонок, что вы можете сделать, это создать список имен столбцов и передать его в качестве индекса сгруппированы в таблицы данных. В вашем случае, например:
columns = ['Y'+str(i) for year in range(1967, 2011)]
df.groupby('Country')[columns].agg('sum')