2017-01-11 4 views
2

Я работаю с этими данными из переписи США, что я импортируемые в dataframe и это выглядит следующим образом:Avoind переиндексация в панде dataframe

enter image description here

Мне нужна, чтобы определить состояние с большим количеством стран, т.е. мне нужно подсчитать количество элементов в столбце CTYNAME, которые имеют одно и то же имя STNAME. Однако я не могу этого сделать без повторной индексации фрейма данных (или создания нового фреймворка данных), который я нашел inneficient. Как я могу улучшить мое решение:

census_df.set_index(['STNAME','CTYNAME']).count(level=0)['SUMLEV'].argmax()

+2

Как насчет 'census_df. GroupBy ('STNAME') [ 'CTYNAME']. размер(). nlargest (1) '? – IanS

+0

@IanS Это отлично работает. Однако я не понимаю, что такое объект groupby. Разве это также не создает объект с одинаковым размером кадра данных, поэтому он неэффективен? Кроме того, я не знал самой большой функции - чрезвычайно полезен! – cinico

+0

Здесь 'groupby' создаст новый объект, но в нем будет столько строк, сколько состояний и один столбец. Честно говоря, я не думаю, что ваше решение было так плохо, хотя это, вероятно, не так, как это делали бы большинство пользователей панд. – IanS

ответ

3

Как обсуждалось в комментариях, это было бы более естественным способом сделать это, и, вероятно, более эффективным:

census_df.groupby('STNAME')['CTYNAME'].size().nlargest(1) 
Смежные вопросы