Добавление строк в фрейм данных - PullRequest
0 голосов
/ 26 сентября 2018

Я застрял на простом задании.Я хочу создать пустой DataFrame и добавить к нему строки на основе запроса другого набора данных.Я попробовал ответы здесь, но мне чего-то не хватает .. новичок Pythoner.Любая помощь будет оценена.Я хочу взять верхние 3 строки каждого состояния и добавить их в новый фрейм данных для обработки.Я пытался добавить также ..

def test():

    #get the list of states
    states_df = census_df.STNAME.unique()
    population_df = pd.DataFrame()

    for st in states_df:
        temp_df = pd.DataFrame(census_df[census_df['STNAME'] == st].nlargest(3,'CENSUS2010POP'))
        pd.concat([temp_df, population_df], ignore_index = True)

    return 1

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Я думаю, я знаю, по какому курсу вы идете, я прекрасно провел время с этим год назад, так держать!

Самый простой / быстрый способ, который я нашел для конкатенации группы фрагментов данных, - это добавить каждый 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)
0 голосов
/ 26 сентября 2018

Добро пожаловать на ТАК!Ваша проблема добавляется или три верхних ряда?

Для добавления попробуйте функцию df.append .Это может выглядеть примерно так:

#get the list of states
states_df = census_df.STNAME.unique()
population_df = pd.DataFrame()

for st in states_df:
    temp_df = pd.DataFrame(census_df[census_df['STNAME'] == st].nlargest(3,'CENSUS2010POP'))
    population_df = population_df.append(temp_df, ignore_index = True) #append the temp df to your main df, ignoring the index

Для верхних строк вы можете использовать df.sort_values ​​(by = ['имя столбца'], возрастание = False), а затем выбрать три верхние строки:

population_df = population_df.append(temp_df[0:3], ignore_index = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...