Фреймы данных Pandas группируются по одному столбцу, а другие умножаются - PullRequest
0 голосов
/ 03 ноября 2018

Я использую python с пандами, импортированными для манипулирования некоторыми данными из имеющегося у меня CSV-файла. Просто играю, чтобы попробовать что-то новое.

У меня есть следующий фрейм данных:

Image of Data Frame

Я хотел бы сгруппировать данные по столбцу col1, чтобы получить следующий результат. Что является groupby на col1 и col3 и col4, умноженных вместе.

Image of result I would like

Я смотрел несколько видео на YouTube и читал несколько похожих вопросов о переполнении стека, но у меня возникли проблемы. Пока у меня есть следующее, что включает создание нового Col для хранения результата Col3 x Col4:

df['Col5'] = df.Col3 * df.Col4
gf = df.groupby(['col1', 'Col5'])

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Вы можете использовать решение без создания нового столбца, вы можете создать несколько столбцов и агрегировать по столбцу df['Col1'] с агрегатом sum, это syntactic sugar:

gf = (df.Col3 * df.Col4).groupby(df['Col1']).sum().reset_index(name='Col2')
print (gf)
    Col1     Col2
0  12345    38.64
1  23456  2635.10
2  45678   419.88

Возможно иное решение: создать индекс на Col1 на set_index, несколько столбцов на prod и, наконец, sum на индекс на level=0:

gf = df.set_index('Col1')[['Col3','Col4']].prod(axis=1).sum(level=0).reset_index(name='Col2')
0 голосов
/ 03 ноября 2018

Почти, но в итоге вы группируете по слишком большому количеству столбцов. Попробуйте:

gf = df.groupby('Col1')['Col5'].sum()

Или, чтобы получить его в виде фрейма данных, а не Col1 в качестве индекса (я считаю, что это то, что вы хотите от своего изображения), включите as_index=False в вашу группу:

gf = df.groupby('Col1', as_index=False)['Col5'].sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...