gpt4 book ai didi

python - 循环只取最后一个值

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:23 25 4
gpt4 key购买 nike

我有一个包含每年特定国家/地区人口的数据框和一个包含每年世界人口的 Pandas 系列。这是我正在使用的系列:

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

但是我看不出循环中有什么错误。提前致谢。

最佳答案

你不需要循环,你可以使用groupby.transform直接在 df3 中创建列 pop_tot。然后对weighted列进行列操作即可,如:

df3['pop_tot'] = df3.groupby('Year')['population'].transform(sum)
df3['weighted'] = df3['population']/df3['pop_tot']

正如@roganjosh 所指出的,您的方法存在的问题是每次您的条件if 都替换了整个列pop_totweighted满足,因此在满足此条件的最后一次迭代中,年份可能是 2017 年,您将 pop_tot 列的值定义为 2017 年,并使用该值计算 weithed。

关于python - 循环只取最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55093651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com