如何计算组内和组间的百分比变化?

问题描述 投票:0回答:1

我看过很多帖子问这个问题,但无法使用我的数据集。

我有一个包含摘要信息的数据框(从

.groupby
describe()
操作输出)。

data = [
    [123456, "2017", 8.0, 150.235],
    [123456, "2018", 8.0, 202.5],
    [123456, "2019", 7.0, 168.526],
    [123456, "2020", 6.0, 175.559],
    [123456, "2021", 8.0, 206.667],
    [789101, "2017", 8.0, 228.9],
    [789101, "2018", 5.0, 208]
]

df = pd.DataFrame(
    data,
    columns=[
        "ID",
        "year",
        "count",
        "mean",
    ],
)
df

我正在尝试做两件事:

  1. 计算
    ID
    内从
    year
    year
    的百分比变化。
  2. 计算
    ID
    的百分比变化,即从第一个
    year
    到最新的
    year
    总体百分比变化是多少。

我尝试过的事情:

  1. df["pct_ch"] = df.groupby(["ID", "year"])["mean"].apply(pd.Series.pct_change) + 1
    按照这里的建议,不幸的是这会返回所有
    NaN
    的列。
  2. df["pct_change"] = df.groupby(["ID", "year"])["mean"].pct_change(-1)
    按照建议here,它还会返回所有
    NaN
    值的列。

我很好奇我做错了什么(为什么我得到了所有

NaN
以及如何计算这些百分比变化列?

理想的输出看起来像这样:

python pandas dataframe percentage
1个回答
0
投票

不应该按年份分组,直接

groupby.pct_change
即可:

df['pct_ch'] = df.groupby('ID')['mean'].pct_change()

通过将年份设置为组,您的组仅包含one行,并且无需计算。

输出:

       ID  year  count     mean    pct_ch
0  123456  2017    8.0  150.235       NaN
1  123456  2018    8.0  202.500  0.347888
2  123456  2019    7.0  168.526 -0.167773
3  123456  2020    6.0  175.559  0.041732
4  123456  2021    8.0  206.667  0.177194
5  789101  2017    8.0  228.900       NaN
6  789101  2018    5.0  208.000 -0.091306
© www.soinside.com 2019 - 2024. All rights reserved.