Получите среднее значение из заданных c строк и сохраните его - PullRequest
1 голос
/ 10 апреля 2020

У меня есть кадр данных, который выглядит примерно так:

   userId     id      rating
   1          110     1.0
   2          141     3.0
   2          260     4.5
   2          1092    2.5
   3          223     4.0

У меня есть список всех идентификаторов пользователей, хранящихся в users_list.

Он очень длинный (1M строк), и я пытаюсь получить средний рейтинг для каждого пользователя и сохранить его:

  • в том же списке пользователей, что и раньше, но в виде пары
    • Мне нравится [[userId1, meanRating] , [userId2, meanRating], ...]
  • Как функция в DataFrame, поэтому каждая строка имеет средний рейтинг этого указанного пользователя c (я могу удалить все строки кроме 1 на пользователя)

Я могу получить средний рейтинг с помощью df.loc[df['userId'] == users_list[someId]]['rating'].mean(), но если я пытаюсь где-то его сохранить, я получаю ошибку, что пытаюсь установить значения для копии.

Что было бы лучшим способом go об этом?

1 Ответ

1 голос
/ 11 апреля 2020

Вот ответ с двумя вариантами:

Если вы хотите иметь исходный фрейм данных со средним столбцом

df = df.merge(df.groupby('userId')['rating'].mean().reset_index().rename(columns={'rating':'mean'}), on='userId')

   userId    id  rating      mean
0       1   110     1.0  1.000000
1       2   141     3.0  3.333333
2       2   260     4.5  3.333333
3       2  1092     2.5  3.333333
4       3   223     4.0  4.000000

Если вы хотите новый фрейм данных только с идентификатором пользователя и средним значением

df = df.groupby('userId')['rating'].mean().reset_index().rename(columns={'rating':'mean'})

   userId      mean
0       1  1.000000
1       2  3.333333
2       3  4.000000
...