Pandas nunique(), но возвращает только значение.counts() > 1

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных с идентификаторами пользователей, результат users['user id'].nunique() возвращает уникальное количество пользователей. users['user id'].value_counts() Возвращает количество каждого уникального идентификатора пользователя. Есть ли способ объединить два, где я хочу, чтобы количество идентификаторов пользователей появлялось более одного раза (т.Е. 2 или более)

любые предложения приветствуются

Ответ №1:

Вы могли бы использовать маску на выходе value_counts :

 >>> import pandas as pd
>>> d = {'user_id': ['Apple', 'Banana', 'Carrot', 'Carrot', 'Apple']}
>>> users = pd.DataFrame(data=d)
>>> users
  user_id
0   Apple
1  Banana
2  Carrot
3  Carrot
4   Apple
>>> counts = users['user_id'].value_counts()
>>> counts
Carrot    2
Apple     2
Banana    1
Name: user_id, dtype: int64
>>> counts_greater_than_1 = counts[counts > 1]
>>> counts_greater_than_1
Carrot    2
Apple     2
Name: user_id, dtype: int64
>>> len(counts_greater_than_1)
2
  

Комментарии:

1. Большое спасибо! Это наверняка работает. В итоге я решил проблему с помощью sum(df.groupby(‘User ID’).size()> 1), но я думаю, что ваш подход более интуитивно понятен.

2. Рад помочь.

Ответ №2:

Существуют и другие способы получения количества идентификаторов пользователей, которые появлялись более одного раза. Вы можете использовать duplicated(keep=False) для создания маски для просмотра дублированных значений, чтобы вы могли видеть фрейм данных только со значениями, которые появлялись более одного раза с

 mask=users['user id'].duplicated(keep=False)
print(users[mask])
  

теперь, если вы хотите знать, сколько их всего, вы можете сделать users[mask].count() , но вы также можете проверить, сколько раз каждый из них повторяется с df[mask].groupby(by='user id').count()