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

标签 python pandas dataframe

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

<表类="s-表"> <头> 区域 年 粮食援助(kg) 人口 营养不良 营养不良率(%) <正文> 阿富汗 2013 128238 32269.589 8600.00000 26.65000 2014 57214 33370.79400 8800.00000 26.37000 Algolia 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 以来的演变百分比:

  • 粮食援助
  • 营养不良

类似的东西:

<表类="s-表"> <头> 区域 年 粮食援助(公斤) 人口 营养不良 营养不良率(%) 粮食援助演变(%) 营养不良率演变(%) <正文> 阿富汗 2013 128238 32269.589 8600.00000 26.65000 --- --- 2014 57214 33370.79400 8800.00000 26.37000 -55.38 -1.051 Algolia 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 行之间添加一个包含计算的新列?

最佳答案

使用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/

相关文章:

python - 在数据框行上运行以减少重复对 Python

python - 对数据框最后一行中的所有项目求和

python - Python 按月和年计算多个列值的平均值

python - 在 itertools.product 中重复参数

python - Flask-Sijax 回调是 "working outside of request context"

python - 利用 Pandas 功能/使代码更 Pythonic 来重写 excel 宏

r - 如何使用Rsqlite在sqlite中保存和加载数据

python - Panda python 文本文件处理成 xlsx

python - 如何在 Azure ML Notebook 中使用 Blob 容器文件夹

c++ - 用于访问 BeagleBone Black 的库(3.8 Kerne - Angstrom)