Как суммировать определенные строки с Pandas и добавить результат в defaultdict (большой набор данных) - PullRequest
0 голосов
/ 10 января 2020

У меня есть датафрейм, который состоит из 5 миллионов записей имен. Структура выглядит следующим образом:

фрейм данных

Из этого фрейма данных можно прочитать, что, например, имя Мэри было присвоено 14 малышам. в штате Аляска (АК) в 1910 году. Но имя Мэри было также дано новорожденным в других штатах и ​​в последующие годы.

Что я хотел бы назвать является: Какое имя наиболее часто встречается в этом конкретном наборе данных в целом и как часто это имя назначается?

Я пробовал это:

import pandas as pd
from collections import defaultdict

df = pd.read_csv("names.csv")

mask = df[["Name", "Count"]]

counter = 0
dd = defaultdict(int)

for pos, data in mask.iterrows():
    name = data["Name"]
    dd[name] = dd[name] + data["Count"]
    counter += 1

    if counter == 100000:
      break
print ("Done!")

freq_name = 0
name = ""

for key, value in dd.items():
    if freq_name < value:
        freq_name = value
        name = key

print(name)

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

Любая идея или намек на то, что я могу улучшить, будет принята с благодарностью.

1 Ответ

0 голосов
/ 10 января 2020

Как предлагается в комментариях, вы можете использовать что-то вроде этого:

df = pd.read_csv("names.csv")
name, total_count = max(df.groupby('Name').Count.sum().items(), key=lambda x: x[1])

...