我被困在一个简单的任务上。我想创建一个空的DataFrame并根据另一个数据集的查询向其追加行。我在这里尝试了答案,但我缺少Python初学者。任何帮助,将不胜感激。我想获取每个状态的前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
答案 0 :(得分:1)
我想我知道你在做什么,一年前我度过了愉快的时光,继续努力!
我发现连接一堆切片数据帧的最简单/最快的方法是将每个df附加到列表中,然后最后仅连接该列表。请参阅下面的工作代码(它符合我的解释)。
我同意戴维(David)关于排序的建议,使用起来比较容易,然后只需对第一个3进行切片。随着nlargest()的执行并返回一个我相信的Series而不是一个dataframe,而您想保留整个dataframe结构(所有列)进行串联。
为什么您的函数返回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)
答案 1 :(得分:0)
欢迎您!是附加问题还是前三行?
对于追加,请尝试使用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)