Подтвердить что ты не робот

Как назначить имя столбцу size()?

Я использую .size() для результата group, чтобы подсчитать количество элементов в каждой группе.

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

Спасибо

Вот что я пробовал:

grpd = df.groupby(['A','B'])
grpd['size'] = grpd.size()
grpd

и полученная ошибка:

TypeError: объект DataFrameGroupBy не поддерживает назначение элемента (на второй строке)

4b9b3361

Ответ 1

Результат df.groupby(...) не является DataFrame. Чтобы вернуть DataFrame, вам необходимо применить функцию к каждой группе, преобразовать каждый элемент группы или фильтровать группы.

Похоже, вы хотите, чтобы DataFrame содержал (1) все ваши исходные данные в df и (2) количество данных в каждой группе. Эти вещи имеют разную длину, поэтому, если им нужно зайти в один и тот же DataFrame, вам нужно будет перечислять размер избыточно, т.е. Для каждой строки в каждой группе.

df['size'] = df.groupby(['A','B']).transform(np.size)

(Кроме того: полезно, если вы можете показать сжатый ввод проб и ожидаемые результаты.)

Ответ 2

Встроенный метод объектов .size() объектов DataFrameGroupBy фактически возвращает объект Series с размерами группы, а не DataFrame. Если вы хотите, чтобы DataFrame, чей столбец был размером группы, индексированный группами, с настраиваемым именем, вы можете использовать метод .to_frame() и использовать в качестве аргумента имя требуемого столбца.

grpd = df.groupby(['A','B']).size().to_frame('size')

Если вы хотите, чтобы группы были столбцами снова, вы можете добавить .reset_index() в конец.

Ответ 3

Вам нужно transform size - len of df такой же, как и раньше:

Обратите внимание:

Здесь необходимо добавить один столбец после groupby, иначе вы получите ошибку. Поскольку значение GroupBy.size NaN, то какой столбец используется, не имеет значения. Все колонки работают одинаково.

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df['size'] = df.groupby(['A', 'B'])['A'].transform('size')
print (df)
   A  B  size
0  x  a     1
1  x  c     2
2  x  c     2
3  y  b     2
4  y  b     2

Если необходимо установить имя столбца в агрегирующем df - len of df, очевидно, НЕ то же самое, что и раньше:

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df = df.groupby(['A', 'B']).size().reset_index(name='Size')
print (df)
   A  B  Size
0  x  a     1
1  x  c     2
2  y  b     2

Ответ 4

допустим, n - это имя dataframe, а cst - это количество повторяющихся элементов. Ниже код дает счет в следующем столбце

cstn=Counter(n.cst)
cstlist = pd.DataFrame.from_dict(cstn, orient='index').reset_index()
cstlist.columns=['name','cnt']
n['cnt']=n['cst'].map(cstlist.loc[:, ['name','cnt']].set_index('name').iloc[:,0].to_dict())

Надеюсь это сработает