Эффективный способ создания DataFrame пользовательских сводных показателей по группам - PullRequest
0 голосов
/ 31 января 2019

Я хочу создать новый фрейм данных, сгруппированный по магазинам, который создает несколько новых столбцов сводок для каждого магазина.В приведенном ниже примере для каждого магазина я хочу создать четыре переменные.Переменные аналогичны sumif и countif в excel, но рассчитываются для каждой группы (магазина).

  1. Переменная, которая суммирует все доходы продукта выше, скажем, $ 50.
  2. Переменная, которая суммирует все доходы продукта ниже $ 50
  3. Переменная, которая подсчитывает количество продуктов с доходами выше $ 50
  4. Переменная, которая подсчитывает количество продуктов с доходами ниже$ 50.

Я пробовал различные формы групповой и агг функции.Я понимаю, что мне следует использовать лямбду, но я не уверен, как бы я использовал этот синтаксис для создания нескольких переменных одновременно.

import pandas as pd
import numpy as np

n = 20

df = pd.DataFrame({'Store': np.random.choice(['Store_1', 'Store_2'], n),
            'Revenue': (np.random.random(n) * 50 + 10).round(2)
              })
df

Так что я могу легко рассчитать несколько сводных показателей дохода.Я не знаю, как создать собственные сводные показатели, такие как sumif или countif:

df2 = df.groupby('Store')['Revenue'].agg({'Rev_sum': 'sum', 'Rev_max': 'max'})

Для каждого хранилища (то есть store_1, store_2) я хочу четыре переменные в новом кадре данных, как описано выше (то есть Rev_sum_great_50 и т. Д....)

1 Ответ

0 голосов
/ 31 января 2019
df2 = df.groupby('Store')['Revenue'].agg({'Pos_Rev_Sum': lambda x: np.sum(np.where(x>0)), 'Pos_Rev_Cnt": lambda x: np.count_nonzero(np.where(x>0))})

Это решение для первых двух столбцов, остальные следуют его примеру.

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