Добавить столбец с количеством оценок на пользователя, панды - PullRequest
3 голосов
/ 22 апреля 2019

Я работаю с набором данных рейтинга книг в форме

userID | ISBN | Rating
23413    1232     2.5
12321    2311     3.2
23413    2532     1.7
23413    7853     3.8

Теперь мне нужно добавить четвертый столбец, который содержит количество оценок каждого пользователя во всем наборе данных:

userID | ISBN | Rating | Ratings_per_user
23413    1232     2.5         3
12321    2311     3.2         1
23413    2532     1.7         3 
23413    7853     3.8         3

Я пробовал:

df_new['Ratings_per_user'] = df_new['userID'].value_counts()

но я получаю ошибку:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

и весь новый столбец заполнен NaN.

Ответы [ 3 ]

1 голос
/ 22 апреля 2019

Использование:

df_new['Ratings_per_user']=df_new.groupby('userID')['userID'].transform('count')

   userID  ISBN  rating  Ratings_per_user
0   23413  1232     2.5                 3
1   12321  2311     3.2                 1
2   23413  2532     1.7                 3
3   23413  7853     3.8                 3
1 голос
/ 22 апреля 2019

Преобразовать результат value_counts в dict и затем использовать replace для создания нового столбца с пользовательскими рейтингами

x = df['userID'].value_counts().to_dict()

df['rating_per_user'] = df['userID'].replace(x)
print(df)

Вывод:

  userID  ISBN  rating  rating_per_user                                                                                              
0   23413  1232     2.5                3                                                                                              
1   12321  2311     3.2                1                                                                                              
2   23413  2532     1.7                3                                                                                              
3   23413  7853     3.8                3 
0 голосов
/ 22 апреля 2019

вы можете использовать map:

df['Rating per user'] = df['userID'].map(df.groupby('userID')['Rating'].count())
print(df)

   userID  ISBN  Rating  Rating per user
0   23413  1232     2.5                3
1   12321  2311     3.2                1
2   23413  2532     1.7                3
3   23413  7853     3.8                3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...