Количество уникальных значений в группе как новый столбец с пандами - PullRequest
0 голосов
/ 13 ноября 2018

Я хотел бы посчитать уникальные наблюдения группы в кадре данных pandas и создать новый столбец с уникальным количеством. Важно отметить, что я не хотел бы сокращать строки в кадре данных; эффективно выполнять нечто похожее на оконную функцию в SQL.

df = pd.DataFrame({
         'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
         'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})

df.groupby('mID')['uID'].nunique()

Получит уникальный счетчик на группу, но он суммирует (уменьшает количество строк), я бы хотел сделать что-то вроде:

df['ncount'] = df.groupby('mID')['uID'].transform('nunique')

(это, очевидно, не работает)

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

GroupBy.transform('nunique')

На v0.23.4 ваше решение работает для меня.

df['ncount'] = df.groupby('mID')['uID'].transform('nunique')
df
      uID mID  ncount
0   James   A       5
1   Henry   B       2
2     Abe   A       5
3   James   B       2
4   Henry   A       5
5   Brian   A       5
6  Claude   A       5
7   James   C       1

GroupBy.nunique + pd.Series.map

Дополнительно,с вашим существующим решением вы можете map серии вернуться к mID:

df['ncount'] = df.mID.map(df.groupby('mID')['uID'].nunique())
df
      uID mID  ncount
0   James   A       5
1   Henry   B       2
2     Abe   A       5
3   James   B       2
4   Henry   A       5
5   Brian   A       5
6  Claude   A       5
7   James   C       1
0 голосов
/ 13 ноября 2018

Ты очень близко!

df['ncount'] = df.groupby('mID')['uID'].transform(pd.Series.nunique)

      uID mID  ncount
0   James   A       5
1   Henry   B       2
2     Abe   A       5
3   James   B       2
4   Henry   A       5
5   Brian   A       5
6  Claude   A       5
7   James   C       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...