У меня есть датафрейм (пример с игрушкой ниже из другого поста), который вы можете сгенерировать с помощью кода ниже;Я хотел бы сгруппировать по столбцам 'col1' и 'col2' и подсчитать количество вхождений в каждой группе, как в этом примере: Как посчитать количество строк в группе (и другую статистику) в группе панд по?
Но чтобы включить результат непосредственно в мой фрейм данных, как в этом примере (где есть только один столбец для группировки): Панды, сгруппировать по количеству и добавить количество к исходному фрейму данных?
Я пытался:
df['count'] = df.groupby(['col1','col2']).transform('count')
И:
df['count'] = df.groupby(['col1','col2'])[['col1','col2']].transform('count')
Но я получаю одну и ту же ошибку оба раза:
ValueError: Length of passed values is 10, index implies 0
Любая идея, как я мог бы обойти это без необходимости объединить результат с моим исходным кадром данных?В R dplyr это было бы довольно просто с groupby
, mutate
и n()
....
Пример игрушки:
col1 col2 col3 col4 col5 col6
0 A B 0.20 -0.61 -0.49 1.49
1 A B -1.53 -1.01 -0.39 1.82
2 A B -0.44 0.27 0.72 0.11
3 A B 0.28 -1.32 0.38 0.18
4 C D 0.12 0.59 0.81 0.66
5 C D -0.13 -1.65 -1.64 0.50
6 C D -1.42 -0.11 -0.18 -0.44
7 E F -0.00 1.42 -0.26 1.17
8 E F 0.91 -0.47 1.35 -0.34
9 G H 1.48 -0.63 -1.14 0.17
Код для генерации кадра данных игрушки:
import numpy as np
import pandas as pd
keys = np.array([
['A', 'B'],
['A', 'B'],
['A', 'B'],
['A', 'B'],
['C', 'D'],
['C', 'D'],
['C', 'D'],
['E', 'F'],
['E', 'F'],
['G', 'H']
])
df = pd.DataFrame(
np.hstack([keys,np.random.randn(10,4).round(2)]),
columns = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6']
)
df[['col3', 'col4', 'col5', 'col6']] = df[['col3', 'col4',
'col5','col6']].astype(float)