Как получить DataFrame из DataFrame с одним столбцом в виде суммы значений других строк? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть DataFrame следующим образом:

        shop_id  item_price  item_cnt_day   day   month  year
        59       9.00        1.0            02    01     2013
        59       8.00        2.0            02    01     2013
        25       10.00       4.0            05    02     2013
        25       17.0        1.0            06    01     2013
        25       10.00       1.0            15    01     2013

И я пытаюсь получить результат, подобный следующему DataFrame:

        shop_id  all_revenue  month  year
        59       25.00        01     2013
        25       27.00        01     2013

Я имею в виду, что хочу получить доход от каждого магазина в январе 2013 года.

НО, я не знаю, как кодировать в Пандах. Любая помощь будет оценена.

Ответы [ 2 ]

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

Мне нравится сначала фильтровать фрейм данных, чтобы уменьшить количество ненужных вычислений:

df.query('month == 1 and year == 2013')\
  .assign(all_revenue = df.item_price * df.item_cnt_day)\
  .groupby(['shop_id','month','year'], as_index=False)['all_revenue'].sum()

Выход:

   shop_id  month  year  all_revenue
0       25      1  2013         27.0
1       59      1  2013         25.0

Примечание: Поскольку ваши имена столбцов «дружественные», без пробелов и специальных символов, вы можете использовать метод query. Если это не работает для именования столбцов, вам нужно использовать логическое индексирование.

df[(df['month'] == 1) & (df['year'] == 2013)]\
  .assign(all_revenue = df.item_price * df.item_cnt_day)\
  .groupby(['shop_id','month','year'], as_index=False)['all_revenue'].sum()
0 голосов
/ 15 ноября 2018

eval + groupby + sum

Вы можете назначить серию через eval, затем использовать groupby:

res = df.eval('revenue=item_price * item_cnt_day')\
        .groupby(['shop_id', 'month', 'year'], as_index=False)['revenue'].sum()

Вы можете, если хотите, query за январь 2013 года (до или после вышеуказанных операций):

res = res.query('month == 1 & year == 2013')

print(res)

   shop_id  month  year  revenue
0       25      1  2013     27.0
2       59      1  2013     25.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...