【问题标题】:How to calculate percentage change with zero in pandas?如何计算熊猫零的百分比变化?
【发布时间】:2022-11-19 16:41:59
【问题描述】:

我想计算以下数据框的百分比变化。

import pandas as pd

df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
                   'points': [12, 0, 19, 22, 0, 25, 0, 30],
                   'score': [12, 0, 19, 22, 0, 25, 0, 30] 
                   
                   })
print(df)

当我应用此步骤时,它会返回 inf,这很明显,因为我们除以零。

df['score'] = df.groupby('team', sort=False)['score'].apply(
     lambda x: x.pct_change()).to_numpy()

但是如果我们在每一列中看到从 0 到 19 的变化是 1900%,从 0 到 25 的变化是 2500%,从 0 到 30 的变化是 3000%。所以,我想知道如何计算这些值。

当前结果

预期结果是

【问题讨论】:

  • 你是说差异吗?
  • 不,我想计算两行之间的百分比变化。
  • 这不是百分比变化
  • 对不起,我认为这是一个百分比变化。那它是什么?

标签: python pandas dataframe group-by data-science-experience


【解决方案1】:

不确定你是否想将分数的下降算作负数,但这会给你你正在寻找的计算结果(乘以 100 得到你如何表示输出中的百分比)。基本上,diff 计算当前和先前之间的差异。

df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
               'points': [12, 0, 19, 22, 0, 25, 0, 30],
               'score': [12, 0, 19, 22, 0, 25, 0, 30]

               })

df["score"] = df.groupby('team', sort=False)['score'].diff() * 100

print(df)

【讨论】:

  • 我可以用 1 或 100 替换那些 1900、2500 和 3000 吗?我认为当它从 12 下降到 0 时,它下降了 100%,当它从 0 上升到 19 时,它增加了 100%
  • 我已经改变了问题中的预期结果
【解决方案2】:

输出看起来像是变化的标志。

如果这是你想要的,你可以使用:

import numpy as np

np.sign(df.groupby('team').diff())

输出:

   points  score
0     NaN    NaN
1    -1.0   -1.0
2     1.0    1.0
3     NaN    NaN
4    -1.0   -1.0
5     1.0    1.0
6     NaN    NaN
7     1.0    1.0

【讨论】:

  • 但我也想要第一列,该怎么做?
【解决方案3】:
# take the sign using np.sign for the diff b/w two consecutive rows
df['chg']=np.sign(df.groupby('team')['score'].diff())
df
    team    points  score   chg
0   A   12  12  NaN
1   A   0   0   -1.0
2   A   19  19  1.0
3   B   22  22  NaN
4   B   0   0   -1.0
5   B   25  25  1.0
6   C   0   0   NaN
7   C   30  30  1.0

【讨论】:

    猜你喜欢
    • 2023-01-02
    • 2016-05-07
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多