Я думаю, я знаю, по какому курсу вы идете, я прекрасно провел время с этим год назад, так держать!
Самый простой / быстрый способ, который я нашел для конкатенации группы фрагментов данных, - это добавить каждый df в список, а затем в конце просто конкатенировать этот список.См. Рабочий код ниже (он делает то, что я вам понял).
Я согласен с предложением Дэвида о сортировке, упрощении сортировки и последующем нарезании первых 3. Поскольку nlargest () работает и возвращаетЯ считаю, что это серия, а не датафрейм, тогда как вы хотите сохранить всю структуру фрейма данных (все столбцы) для конкатенации.
Кроме того, почему ваша функция возвращает 1?Опечатка?Я думаю, вы хотите вернуть желаемый результат, если вы помещаете его в функцию, поэтому я тоже это изменил.
import pandas as pd
import numpy as np
#create fake data random numbers
data = np.random.randint(2,11,(40,3))
census_df = pd.DataFrame(index=range(40), columns=['Blah', 'Blah2','CENSUS2010POP'], data=data)
#create fake STNAME column
census_df['STNAME'] = list('aaaabbbbccccddddeeeeffffgggghhhhiiiijjjj')
#Function:
def test(census_df):
states_list = census_df.STNAME.unique() #changed naming to _list as it's not a df.
list_of_dfs = list() #more efficient to append each df to a list
for st in states_list:
temp_df = census_df[census_df['STNAME']==st]
temp_df = temp_df.sort_values(by=['CENSUS2010POP'], ascending=False).iloc[:3]
list_of_dfs.append(temp_df)
population_df = pd.concat(list_of_dfs,ignore_index=True)
return population_df
population_df = test(census_df)