【发布时间】:2018-04-20 18:40:20
【问题描述】:
我有一张表格,其中包含 15 个国家/地区的各种信息(例如能源供应、可再生能源供应比例)。我必须创建一个数据框,其中包含有关大陆级别的信息,包括每个大陆上的国家数量以及这些大陆上各个国家的人口的平均值、标准差和总和。数据框由上述表格的数据组成。我的问题是,在将 15 个国家映射到各自的大陆之后,我似乎无法汇总大陆级别的数据。我必须使用预定义的字典来解决这个任务。你能帮我解决这个问题吗?请在下面找到我的代码:
def answer_eleven():
import numpy as np
import pandas as pd
Top15 = answer_one()
Top15['Country Name'] = Top15.index
ContinentDict = {'China':'Asia',
'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Russian Federation':'Europe',
'Canada':'North America',
'Germany':'Europe',
'India':'Asia',
'France':'Europe',
'South Korea':'Asia',
'Italy':'Europe',
'Spain':'Europe',
'Iran':'Asia',
'Australia':'Australia',
'Brazil':'South America'}
Top15['Continent'] = pd.Series(ContinentDict)
#Top15['size'] = Top15['Country'].count()
Top15['Population'] = (Top15['Energy Supply'] / Top15['Energy Supply per Capita'])
#columns_to_keep = ['Continent', 'Population']
#Top15 = Top15[columns_to_keep]
#Top15 = Top15.set_index('Continent').groupby(level=0)['Population'].agg({'sum': np.sum})
Top15.set_index(['Continent'], inplace = True)
Top15['size'] = Top15.groupby(['Continent'])['Country Name'].count()
Top15['sum'] = Top15.groupby(['Continent'])['Population'].sum()
Top15['mean'] = Top15.groupby(['Continent'])['Population'].mean()
Top15['std'] = Top15.groupby(['Continent'])['Population'].std()
columns_to_keep = ['size', 'sum', 'mean', 'std']
Top15 = Top15[columns_to_keep]
#Top15['Continent Name'] = Top15.index
#Top15.groupby(['Continent'], level = 0, sort = True)['size'].count()
return Top15.iloc[:5]
answer_eleven()
【问题讨论】:
-
你能
print(df.head(10))连同预期的输出吗?从您的代码中不确定是什么问题。 -
设置Continent为索引有意义吗?
-
@roganjosh:大陆已经在索引中。见行“Top15.set_index(['Continent'], inplace = True)”
-
抱歉,我的评论措辞不清楚。我的意思是我认为这没有道理,我想知道你为什么这样做。
-
我认为必须这样做才能使 groupby 功能正常工作。
标签: python python-3.x pandas dataframe pandas-groupby