Примечание. Я начинаю с задачи, прежде чем выбрать 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
- более компактный способ выполнить вышесказанное, но я обнаружил, что этот способ помог мне разбить шаги (а соответствующий курс еще не имел дело с групповым).