как преобразовать фрейм данных в словарь, сохраняя 1 столбец в качестве ключей и суммируя значения второго столбца для каждого ключа - PullRequest
1 голос
/ 08 мая 2019

У меня есть фрейм данных с двумя столбцами «авторы» и их «ранги». Мне нужно рассчитать общий рейтинг каждого уникального автора. Всего насчитывается 2,3 миллиона уникальных авторов, а размер моего текущего фрейма данных - 13248457,2. Мое текущее решение выполняется очень долго, и я верю, что словари ускорят процесс, но я не знаю, как использовать словари.

следующий код - это то, как я пытался решить эту проблему, но выполнение займет несколько часов.

for auth in unique_auth:
    unique_auth_ranks.append(np.sum(list((df[df.authors == auth ])['rank'])))

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

ранги являются числовыми значениями, например, автор "abc" встречается 3 раза с рангами "1", "3" и "5". Я хочу, чтобы конечный результат был "abc": "9"

1 Ответ

0 голосов
/ 08 мая 2019

IIUC: ваши данные выглядят примерно так:

  AuthorName  rank
0    author1     1
1    author2     2
2    author1     3
3    author1     4
4    author3     5
5    author3     6
6    author5     7
7    author3     8

А ты хочешь:

df = df.groupby('AuthorName').sum()

, который возвращает:

            rank
AuthorName      
author1        8
author2        2
author3       19
author5        7

Поскольку author1 появляется с рангами 1,3,4, результирующая сумма рангов равна 8.

Использование группового режима будет очень быстрым. Вместо того, чтобы просить панд просмотреть весь фрейм данных для каждого уникального имени автора (т.е. df[df.authors == auth ]), groupby отобразит позиционные местоположения для каждого имени автора до агрегирования данных.

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