为了账号安全,请及时绑定邮箱和手机立即绑定

将行附加到数据框

将行附加到数据框

九州编程 2021-06-23 14:15:37
我被困在一个简单的任务上。我想创建一个空的 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 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

我想我知道你在做什么课程,一年前我玩得很开心,坚持下去!


我发现连接一堆切片数据帧的最简单/最快的方法是将每个 df 附加到一个列表,然后最后连接该列表。请参阅下面的工作代码(它按照我的意思解释您的意思)。


我同意 David 关于排序的建议,更易于使用排序,然后只对前 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)


查看完整回答
反对 回复 2021-06-29
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

欢迎来到 SO!您的问题是追加还是前三行?


对于追加,请尝试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=['column name'],ascending=False) 然后选择前三行:


population_df = population_df.append(temp_df[0:3], ignore_index = True)


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号