【发布时间】:2019-08-01 06:47:08
【问题描述】:
我有一个包含每年特定国家人口的数据框和一个包含每年世界人口的熊猫系列。 这是我正在使用的系列:
pop_tot = df3.groupby('Year')['population'].sum()
Year
1990 4.575442e+09
1991 4.659075e+09
1992 4.699921e+09
1993 4.795129e+09
1994 4.862547e+09
1995 4.949902e+09
... ...
2017 6.837429e+09
这是我正在使用的 DataFrame
Country Year HDI population
0 Afghanistan 1990 NaN 1.22491e+07
1 Albania 1990 0.645 3.28654e+06
2 Algeria 1990 0.577 2.59124e+07
3 Andorra 1990 NaN 54509
4 Angola 1990 NaN 1.21714e+07
... ... ... ... ...
4096 Uzbekistan 2017 0.71 3.23872e+07
4097 Vanuatu 2017 0.603 276244
4098 Zambia 2017 0.588 1.70941e+07
4099 Zimbabwe 2017 0.535 1.65299e+07
我想计算每年该国人口占世界人口的比例,所以我循环遍历Series和DataFrame,如下所示:
j = 0
for i in range(len(df3)):
if df3.iloc[i,1]==pop_tot.index[j]:
df3['pop_tot']=pop_tot[j] #Sanity check
df3['weighted']=df3['population']/pop_tot[j]
*df3.iloc[i,2]
else:
j=j+1
但是,我得到的 DataFrame 不是预期的。我最终将所有值除以 2017 年的总人口,从而给了我当年不正确的比例(即对于第一行,pop_tot 应该是 4.575442e+09,因为它对应于 1990 年根据系列上面而不是对应于 2017 年的 6.837429e+09)。
Country Year HDI population pop_tot weighted
0 Albania 1990 0.645 3.28654e+06 6.837429e+09 0.000257158
1 Algeria 1990 0.577 2.59124e+07 6.837429e+09 0.00202753
2 Argentina 1990 0.704 3.27297e+07 6.837429e+09 0.00256096
但是我看不出循环中有什么错误。 提前致谢。
【问题讨论】: