【发布时间】:2021-10-16 04:09:56
【问题描述】:
给定以下数据框(许多地区和年份的子集,每个地区的年份范围不同):
| Area | Year | Food Aid (kg) | Population | Malnutrition | Malnutrition rate (%) |
|---|---|---|---|---|---|
| Afghanistan | 2013 | 128238 | 32269.589 | 8600.00000 | 26.65000 |
| 2014 | 57214 | 33370.79400 | 8800.00000 | 26.37000 | |
| Algeria | 2013 | 35234 | 38140.13300 | 1300.00000 | 3.41000 |
| 2014 | 18980 | 38923.69200 | 1300.00000 | 3.34000 | |
| 2015 | 17424 | 39728.02500 | 1300.00000 | 3.27000 | |
| 2016 | 9476 | 40551.39200 | 1300.00000 | 3.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 年以来的进化百分比:
- 食品援助
- 营养不良
类似:
| Area | Year | Food Aid (kg) | Population | Malnutrition | Malnutrition rate (%) | Food Aid evolution (%) | Malnutrition rate evolution (%) |
|---|---|---|---|---|---|---|---|
| Afghanistan | 2013 | 128238 | 32269.589 | 8600.00000 | 26.65000 | --- | --- |
| 2014 | 57214 | 33370.79400 | 8800.00000 | 26.37000 | -55.38 | -1.051 | |
| Algeria | 2013 | 35234 | 38140.13300 | 1300.00000 | 3.41000 | --- | --- |
| 2014 | 18980 | 38923.69200 | 1300.00000 | 3.34000 | -46.132 | -2.053 | |
| 2015 | 17424 | 39728.02500 | 1300.00000 | 3.27000 | -8.198 | -2.096 | |
| 2016 | 9476 | 40551.39200 | 1300.00000 | 3.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 之间的计算的新列?
【问题讨论】: