Как группировать и агрегировать в одном столбце - PullRequest
0 голосов
/ 26 мая 2018

У меня есть кадр данных о продажах

Date    Store   Company     product             Amount
1-1-18  A       company_x       A001               10
1-1-18  A       company_y       A002               20
1-1-18  A       comapny_z       A003               30
1-1-18  B       comapny_x       A001               40
1-1-18  B       company_y       A002               50
1-1-18  B       company_z       A003               60
2-1-18  A       company_x       A001               10
2-1-18  A       company_y       A002               20
2-1-18  A       comapny_z       A003               30
2-1-18  B       comapny_x       A001               40
2-1-18  B       company_y       A002               50
2-1-18  B       company_z       A003               60
2-1-18  A       company_x       A001               10
2-1-18  A       company_y       A002               20
2-1-18  A       comapny_z       A003               30
2-1-18  B       comapny_x       A001               40
2-1-18  B       company_y       A002               50
2-1-18  B       company_z       A003               60
2-1-18  A       company_x       A001               10
2-1-18  A       company_y       A002               20
2-1-18  A       comapny_z       A003               30
2-1-18  B       comapny_x       A001               40
2-1-18  B       company_y       A002               50
2-1-18  B       company_z       A003               60
3-1-18  A       company_x       A001               10
3-1-18  A       company_y       A002               20
3-1-18  A       comapny_z       A003               30
3-1-18  B       comapny_x       A001               40
3-1-18  B       company_y       A002               50
3-1-18  B       company_z       A003               60

Я хочу получить уникальный счет заказа на продажу для каждого продукта, сгруппированного по продукту, компании и магазину

Store   Company     product          Count
A       Company_x       A001            5 
B       Company_y       A002            5
C       Company_z       A003            5

Я пытался

df.groupby(['Store','Company','Product'],as_index='False').agg({'product':'nunique'})

Но python выдает мне ошибку в значении, по-видимому, я не могу использовать один и тот же столбец для группировки и объединения, как мне кажется.

Буду признателен за вашу любезную помощь для достижения моей цели

Изменить:

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

Таким образом, решение заключается в том, df.groupby (['Store', 'Company', 'Product'], as_index = 'False') .agg ({ 'Date': 'nunique'})

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

Агрегирование с nunique в индексе product вернет 1 для каждой группы, так как product - последний уровень в индексе.

Используйте функцию агрегирования 'size' и переименуйтесерия до count как в вашем примере.Затем reset_index или, альтернативно, groupby с опцией as_index=False.

df.groupby(['Store', 'Company', 'product']).agg('size').rename('count').reset_index()

  Store    Company product  count
0     A  comapny_z    A003      5
1     A  company_x    A001      5
2     A  company_y    A002      5
3     B  comapny_x    A001      5
4     B  company_y    A002      5
5     B  company_z    A003      5
0 голосов
/ 26 мая 2018

count в groupby вернет все значения для уникальной строки, а затем выберет сумму и переименует столбец.

data.groupby(['Store','Company','product'],as_index='False').count()['Amount'].rename('count').reset_index()

  Store    Company product  count
0     A  comapny_z    A003      5
1     A  company_x    A001      5
2     A  company_y    A002      5
3     B  comapny_x    A001      5
4     B  company_y    A002      5
5     B  company_z    A003      5
0 голосов
/ 26 мая 2018

Похоже, есть 2 проблемы:

  1. Название вашей серии product, а не Product.
  2. Чтобы подсчитать количество предметов, вы можетеиспользуйте len.nunique дает количество уникальных значений.

Вот демоверсия:

res = df.groupby(['Store','Company','product'],as_index='False').agg({'product': len})

print(res)
                         product
Store Company   product         
A     comapny_z A003           5
      company_x A001           5
      company_y A002           5
B     comapny_x A001           5
      company_y A002           5
      company_z A003           5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...