2016-12-29 3 views
2

DataFrame, как так:Вставьте GroupBy результат в новый столбец РАЗ на экземпляр

new 
Color Value 
0 Red 100 
1 Red 150 
2 Blue  50 

Я вставив отсчеты дублей в новую серию с:

new['Repeats'] = new.groupby(['Color'])[new.columns[-1]].transform('count')

Какие результаты в:

Color Value Repeats 
0 Red 100  2 
1 Red 150  2 
2 Blue  50  1 

Есть ли способ получить тот же результат, но есть только «Повторения» en один раз на экземпляр, например:

Color Value Repeats 
0 Red 100  2 
1 Red 150   
2 Blue  50  1 

Мне кажется глупым, но клиент запрашивается как таковой.

Заранее благодарю за любую помощь.

ответ

2

После выполнения transform, используйте loc и duplicated, чтобы сделать дубликаты пустые строки:

new.loc[new['Color'].duplicated(), 'Repeats'] = '' 

Полученный выход:

Color Value Repeats 
0 Red 100  2 
1 Red 150   
2 Blue  50  1 

Обратите внимание, что вы можете также назначить дублированные в np.nan, но вам нужно будет сначала преобразовать столбцы 'Repeats' в строку dtype, иначе счетчики станут плавать.

+0

Beat me to it ... :) Я бы заменил на 'np.nan', чтобы вместо столбца Repeats число вводить новый тип с пустой строкой. – 3novak

+0

Это красиво. Спасибо! – bmeredith

+0

@ 3novak: Да, мой первоначальный инстинкт состоит в том, чтобы использовать 'np.nan', но это приведет к преобразованию столбца из' int' в 'float' dtype, что делает counts от' 2' до '2.0' и т. Д. Если клиент @ bmeredith достаточно разборчив, чтобы не нравиться повторный подсчет, им, вероятно, тоже не нравятся поплавки. Путь вокруг этого состоит в том, чтобы сначала преобразовать столбец в строку dtype или что-то в этом роде, поэтому вам нужно будет изменить тип независимо. – root

Смежные вопросы