Лучший способ получить много статистических данных из кадра данных? - PullRequest
0 голосов
/ 18 марта 2019

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

Consumer_ID|Client|Campaign|Date

Я пытаюсь получить уникальный счетчик столбца consumer_ID для различных комбинаций столбцов Client, Campaign и Date.До сих пор я придумал два решения:

  1. Групповые операторы с подсчетом в качестве функции agg для каждой комбинации клиента, кампании и даты.
  2. Запись для циклов и фильтрация накаждая комбинация столбцов клиента, кампании и даты, а затем с помощью функции nunique () получить окончательный счет.

Мой вопрос: есть ли более чистый и более питонский способ получения уникального счетчика одногостолбец для всех доступных комбинаций других столбцов?

Пример (раздражающее) решение с использованием groupbys: Да, понятно, но есть ли более питонный способ получить каждую комбинацию столбцов groupby?Например, сейчас, чтобы получить все комбинации, я должен написать:

df.groupby(['Client']).Consumer_ID.nunique()
df.groupby(['Client', 'Campaign']).Consumer_ID.nunique()
df.groupby(['Client', 'Campaign', 'Date']).Consumer_ID.nunique()
df.groupby(['Client', 'Date'].Consumer_ID.nunique()

Ответы [ 4 ]

1 голос
/ 18 марта 2019

Если я правильно понимаю:

df.groupby(df.columns.drop(Consumer_ID).tolist(), as_index=False).nunique()
0 голосов
/ 19 марта 2019

ответил на мой вопрос. Я использовал комбинации itertools для создания всех возможных комбинаций столбцов, которые затем используются для завершения всех групповых агрегаций. Пример кода ниже:

from itertools import combinations
cols = df.columns
combinations = [j for i in range(len(cols)) for j in combinations(cols, i+1)]

Затем я могу использовать разные комбинации столбцов в списке «комбинаций» для завершения всех групповых агрегаций без необходимости многократной записи оператора groupby.

Спасибо!

0 голосов
/ 18 марта 2019

Вы можете использовать сводную таблицу, как показано ниже:

импорт панд как pd pd.pivot_table (df, index = ['Client', 'Campaign', 'Date'], values ​​= 'Consumer_ID', aggfunc = pd.Series.nunique)

0 голосов
/ 18 марта 2019

Я считаю, что вы ищете:

df.groupby(['Client', 'Campaign', 'Date']).Consumer_ID.nunique()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...