#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 …….. затем группирует по букве столбца ….. и принимает количество каждой буквы. Спасибо!!