【发布时间】:2016-12-23 06:43:26
【问题描述】:
我正在使用 pandas DataFrame Top15,其中包含世界上 15 个国家/地区的人口数据。
Population
Country
China 1.367645e+09
United States 3.176154e+08
Japan 1.274094e+08
United Kingdom 6.387097e+07
Russian Federation 1.435000e+08
Canada 3.523986e+07
Germany 8.036970e+07
India 1.276731e+09
France 6.383735e+07
South Korea 4.980543e+07
Italy 5.990826e+07
Spain 4.644340e+07
Iran 7.707563e+07
Australia 2.331602e+07
Brazil 2.059153e+08
现在我想查看这些数据的大陆统计数据。所以我使用字典创建了一个 groupby 对象:
df = Top15.groupby(ContinentDict)
地点:
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'}
然后我正在创建一个包含各种统计信息的新数据框:
new_df = pd.DataFrame({'size' : df.size().values, 'sum' : df.sum().values, 'mean' : df.mean().values, 'std' : df.std().values}, index = df.groups.keys())
我得到以下输出:
mean size std sum
North America 5.797333e+08 5 6.790979e+08 2.898666e+09
Asia 2.331602e+07 1 NaN 2.331602e+07
South America 7.632161e+07 6 3.464767e+07 4.579297e+08
Europe 1.764276e+08 2 1.996696e+08 3.528552e+08
Australia 2.059153e+08 1 NaN 2.059153e+08
如您所见,在标准差列中,有两个 NaN 值(适用于亚洲和澳大利亚)。
在此之后,我尝试查看各个值
df.std()
我得到:
Asia 6.790979e+08
Australia NaN
Europe 3.464767e+07
North America 1.996696e+08
South America NaN
Name: Population, dtype: float64
现在亚洲完全没问题,而南美则不然!我的原始数据框中没有任何 NaN 值。如何解释这种奇怪的行为以及如何解决它?
【问题讨论】:
-
可以加
ContinentDict吗? -
@jezrael :添加了字典。
-
我现在才意识到最终输出中大陆的大小也是错误的。
标签: python python-3.x pandas group-by