Количество элементов в Groupby

#python #pandas #duplicates #pandas-groupby

#python #pandas #дубликаты #pandas-groupby

Вопрос:

Это пример более крупного фрейма данных. У меня есть фрейм данных в groupby из 4-х

 gr = df.groupby(np.arange(len(df.index))//4)
  

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

Я попробовал пару вещей, но все еще не могу перевести это в конечную форму. Буду признателен за любую помощь. Я пробовал df.duplicate, value_count , но его форма не соответствует желаемому. Есть идеи? Может быть, value_count, а затем сопоставление букв в нужных местах?

Также я хочу избегать циклов for. Я больше ищу трюк с фреймом данных pandas или, может быть, функцию lambda x, которая могла бы сработать.

 import pandas as pd
import numpy as np

data= [['X',1000],
['X',60],
['X',60],
['Y',40],
['X',60],
['Z',30],
['X',60],
['Z',30],
['X',60],
['Z',30],
['Y',40],
['S',25]]

df = pd.DataFrame(data,columns=['Letter','Cost'])

#groupby4s
gr = df.groupby(np.arange(len(df.index))//4)
  

Форма, которую я ищу:

     Letter  Cost  Count 
0        X    60      3
1        X    60      3
2        X    60      3
3        Y    40      1
4        X    60      2
5        Z    30      2
6        X    60      2
7        Z    30      2
8        X    60      1
9        Z    30      1
10       Y    40      1
11       S    25      1
  

Комментарии:

1. Попробуйте groupby().agg({[ваши столбцы]: [‘сумма’, ‘количество’]})

Ответ №1:

Попробуйте использовать groupby с transform и count :

 df['Count'] = df.groupby([np.arange(len(df.index))//4, df['Letter']])['Letter']
                .transform('count')
  

Вывод:

    Letter  Cost  Count
0       X  1000      3
1       X    60      3
2       X    60      3
3       Y    40      1
4       X    60      2
5       Z    30      2
6       X    60      2
7       Z    30      2
8       X    60      1
9       Z    30      1
10      Y    40      1
11      S    25      1
  

Комментарии:

1. Я пытался сделать именно то, на что вы ответили, мой синтаксис был определенно неправильным…………… позвольте мне убедиться, что я понимаю………. groupby … группирует его на 4 …….. затем группирует по букве столбца ….. и принимает количество каждой буквы. Спасибо!!