python - 在由 2 个字段分组的 DataFrame 中,从第一个分组字段内的第二个分组字段计算行 n 和 n-1 之间的差异
问题描述
给定以下数据框(许多区域和年份的子集,每个区域的年份范围不同):
区域 | 年 | 粮食援助(公斤) | 人口 | 营养不良 | 营养不良率 (%) |
---|---|---|---|---|---|
阿富汗 | 2013 | 128238 | 32269.589 | 8600.00000 | 26.65000 |
2014 | 57214 | 33370.79400 | 8800.00000 | 26.37000 | |
阿尔及利亚 | 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 </td> | 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 以来的演变百分比:
- 粮食援助
- 营养不良
就像是 :
区域 | 年 | 粮食援助(公斤) | 人口 | 营养不良 | 营养不良率 (%) | 粮食援助演变 (%) | 营养不良率演变(%) |
---|---|---|---|---|---|---|---|
阿富汗 | 2013 | 128238 | 32269.589 | 8600.00000 | 26.65000 | --- | --- |
2014 | 57214 | 33370.79400 | 8800.00000 | 26.37000 | -55.38 | -1.051 | |
阿尔及利亚 | 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 </td> | 3.21000 | -45.615 | -1.835 |
我是熊猫的初学者。我已经尝试了几件事,但没有取得多大成功。例如,这个循环我不确定如何使用它来使事情正常工作:
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
df.groupby(level=0).agg({'Food Aid (kg)': 'pct_change',
'Malnutrition rate (%)': 'pct_change'})*100
Food Aid (kg) Malnutrition rate (%)
Area
Afghanistan NaN NaN
Afghanistan -55.384519 -1.050657
Algeria NaN NaN
Algeria -46.131577 -2.052786
Algeria -8.198103 -2.095808
Algeria -45.615243 -1.834862
这假设您要比较的年份是有序且连续的
推荐阅读
- pyspark - 将 SQL 模式分配给 Spark DataFrame
- python - Seaborn 在 x 轴刻度上给出了错误的值?
- sublimetext3 - How to change color of font?
- git - Github 组织中所有存储库的单一 jenkins 作业
- java - 如何从数据库视图/刷新实体重新加载内容?
- google-cloud-platform - Google 部署管理器 - 项目创建权限被拒绝
- xml - 使用 XSLT 节点值的 XML 到 CSV 未显示
- enums - 如何从其判别式创建无字段枚举变体?
- c++ - 为什么我不能使用 DwmSetIconicThumbnail 在任务栏上设置缩略图?
- machine-learning - 我可以使用哪种聚类模型来预测以下结果?