给定以下数据框(许多地区和年份的子集,每个地区的年份范围不同):
使用来自数据集的 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 以来的演变百分比:
- 粮食援助
- 营养不良
类似的东西:
我是 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/