python - 循环只取最后一个值

标签 python pandas loops

我有一个包含每年特定国家人口的数据框和一个包含每年世界人口的 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

这是我正在使用的数据框

        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 年的值,并使用该值计算权重。

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

相关文章:

python - 按字典中的值删除重复项

python - pytest:如何将类参数传递给 setup_class

Python:将字符串(%,括号, ',')中的多种格式转换为数字

python - 多重索引和日期时间

python - 如果第一个函数失败,则应用第二个函数

java - 从名称为variableX的变量中检索数据 - Java

javascript - 更新javascript中事件函数中的全局变量

python - 具有长时间运行计算的 Django 应用程序

python - 如何从 Tk Text() 对象中删除所有标签

javascript - 在每个循环中获取相对值 jQuery