gpt4 book ai didi

python - 在按 2 个字段分组的 DataFrame 中,从第一个分组字段内的第二个分组字段计算行 n 和 n-1 之间的差异

转载 作者:行者123 更新时间:2023-12-02 16:08:15 25 4
gpt4 key购买 nike

给定以下数据框(许多地区和年份的子集,每个地区的年份范围不同):

<表类="s-表"><头>区域年粮食援助(kg)人口营养不良营养不良率(%)<正文>阿富汗201312823832269.5898600.0000026.6500020145721433370.794008800.0000026.37000 Algolia 20133523438140.133001300.000003.4100020141898038923.692001300.000003.3400020151742439728.025001300.000003.270002016947640551.392001300.000003.21000

使用来自数据集的 groupby 创建,该数据集包含每个国家和每个可用年份的数据;然后添加计算行:

df.groupby(['Area', 'Year']).agg(
{
'Food Aid (kg)' : 'sum',
'Population' : lambda x: x.iloc[0],
'Malnutrition': lambda x: x.iloc[0]
})

df['Malnutrition rate (%)'] = round(((df.loc[:,'Malnutrition'] / df.loc[:,'Population']))*100,2)

我想添加 2 个聚合列。对于一个国家,给定年份 N,自 N-1 以来的演变百分比:

  • 粮食援助
  • 营养不良

类似的东西:

<表类="s-表"><头>区域年粮食援助(公斤)人口营养不良营养不良率(%)粮食援助演变(%)营养不良率演变(%)<正文>阿富汗201312823832269.5898600.0000026.65000------20145721433370.794008800.0000026.37000-55.38-1.051 Algolia 20133523438140.133001300.000003.41000------20141898038923.692001300.000003.34000-46.132-2.05320151742439728.025001300.000003.27000-8.198-2.0962016947640551.392001300.000003.21000-45.615-1.835

我是 Pandas 的初学者。我尝试了几件事但没有成功。例如,我不确定如何使用这个循环来使事情正常进行:

for key, value in df:
# key is an array of grouped keys. Examples: (Afghanistan, 2013), (Afghanistan, 2014)
# value is a Series of the various cols for the current row

问题:在按 2 个字段分组的数据框中:如何在第一个分组字段内的第二个分组字段的第 n 行和第 n-1 行之间添加一个包含计算的新列?

最佳答案

使用pct_change:

new_cols = {'Food Aid (kg)': 'Food Aid evolution (%)',
'Malnutrition rate (%)': 'Malnutrition rate evolution (%)'}

out = df.join(df.groupby('Area')[['Food Aid (kg)', 'Malnutrition rate (%)']]
.pct_change().mul(100).rename(columns=new_cols))
>>> out[new_cols.values()]

Food Aid evolution (%) Malnutrition rate evolution (%)
Area Year
Afghanistan 2013 NaN NaN
2014 -55.384519 -1.050657
Algeria 2013 NaN NaN
2014 -46.131577 -2.052786
2015 -8.198103 -2.095808
2016 -45.615243 -1.834862

关于python - 在按 2 个字段分组的 DataFrame 中,从第一个分组字段内的第二个分组字段计算行 n 和 n-1 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68763331/

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