#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()