У меня есть фрейм данных с дублирующимися строками
>>> d = pd.DataFrame({'n': ['a', 'a', 'a'], 'v': [1,2,1]})
>>> d
n v
0 a 1
1 a 2
2 a 1
Я хотел бы понять, как конкретно использовать метод .groupby()
, чтобы я мог добавить новый столбец в фрейм данных, который показывает количество строк, которыеидентичен текущему.
>>> dd = d.groupby(by=['n','v'], as_index=False) # Use all columns to find groups of identical rows
>>> for k,v in dd:
... print(k, "\n", v, "\n") # Check what we found
...
('a', 1)
n v
0 a 1
2 a 1
('a', 2)
n v
1 a 2
Когда я пытаюсь сделать dd.count()
на результирующем DataFrameGroupBy
объекте, я получаю IndexError: list index out of range
. Похоже, это происходит потому, что все столбцы используются в операции группировки, и нет другого столбца для подсчета. Точно так же dd.agg({'n', 'count'})
терпит неудачу с ValueError: no results
.
Я мог бы использовать .apply()
для достижения чего-то похожего на результат.
>>> dd.apply(lambda x: x.assign(freq=len(x)))
n v freq
0 0 a 1 2
2 a 1 2
1 1 a 2 1
Однако это имеет две проблемы: 1) что-то происходит синдекс, так что трудно сопоставить его с исходным индексом, 2) это не кажется идиоматическим, и Панды и руководства не поощряют , используя .apply()
, поскольку это может быть медленным.
IsЕсть более идиоматический способ подсчета повторяющихся строк при использовании .groupby()
?