Как суммировать каждые 3 строки по столбцу в Pandas Кадр данных Python - PullRequest
1 голос
/ 23 февраля 2020

У меня есть pandas фрейм данных top3 с данными, как на рисунке ниже.

Data table from PANDAS in jupyter notebook

Используя два столбца, STNAME и SENSUS2010POP, мне нужно найти сумму для Вайоминга (сумма: 91738 + 75450 + 46133 = 213321), затем сумма для Висконсина (сумма: 1825699), Западной Вирджинии и так далее. Подведение итогов по 3 округам для каждого штата. (и нужно отсортировать их в порядке возрастания после этого).

Я попробовал этот код, чтобы вычислить ответ:

topres=top3.groupby('STNAME').sum().sort_values(['CENSUS2010POP'], ascending=False)

Может быть, вы можете предложить более эффективный способ сделать это? Может быть, с лямбда-выражением?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

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

df.groupby('STNAME').sum()
0 голосов
/ 23 февраля 2020

Примечание. Я начинаю с задачи, прежде чем выбрать 3 верхние округа в каждом штате, и сразу перехожу к их сумме.

Мне показалось полезным с этой проблемой использовать выбор списка.

Я создал представление данных округов с помощью:

counties_df=census_df[census_df['SUMLEV'] == 50]

и отдельного состояния, чтобы я мог получить их имена.

states_df=census_df[census_df['SUMLEV'] == 40]

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

res = [(x, counties_df[(counties_df['STNAME']==x)].nlargest(3,['CENSUS2010POP'])['CENSUS2010POP'].sum()) for x in states_df['STNAME']]

Я преобразовал этот результат для фрейма данных

dfObj = pd.DataFrame(res)

с именами столбцов

   dfObj.columns = ['STNAME','POP3'] 

отсортирован по месту

dfObj.sort_values(by=['POP3'], inplace=True, ascending=False)

и возвращает первые 3

return dfObj['STNAME'].head(3).tolist()

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

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