python - pandas 丢失数据的百分比变化

标签 python pandas division percentage

我需要获取多列的百分比变化。

import pandas as pd
t="""Year\tChild\tBehaviour
1987\tBoy\tGood
1987\tGirl\tGood
1987\tBoy\tBad
1987\tGirl\tBad
2020\tBoy\tBad
2020\tBoy\tBad
2020\tGirl\tBad
2020\tGirl\tBad"""
from io import StringIO
df=pd.read_table(StringIO(t))
pv=pd.crosstab(df["Child"], [df["Year"], df["Behaviour"]])
print(pv)
print(pv[2020]/pv[1987]-1)

在未来的残酷世界中,不再有好 child 了,这是一个问题,因为我得到的是 NaN 而不是 -1 (-100%):

Year      1987      2020
Behaviour  Bad Good  Bad
Child                   
Boy          1    1    2
Girl         1    1    2

Behaviour  Bad  Good
Child               
Boy          1   NaN
Girl         1   NaN

一般情况下如何解决这个问题?我是否需要预先追加用 0 填充的缺失列?或者还有另一种方法来获取百分比变化

最佳答案

您可能想要这样的东西,使用 fillna方法?

>>> (pv[2020]/pv[1987]).fillna(0) - 1
Behaviour  Bad  Good
Child               
Boy          1    -1
Girl         1    -1

其他方法是使用 crosstab 中的 dropna=True 参数功能:

>>> pv = pd.crosstab(df["Child"], [df["Year"], df["Behaviour"]], dropna=False)
>>> pv
      1987      2020     
       Bad Good  Bad Good
Child                    
Boy      1    1    2    0
Girl     1    1    2    0

>>> pv[2020]/pv[1987] - 1
       Bad  Good
Child           
Boy      1    -1
Girl     1    -1

关于python - pandas 丢失数据的百分比变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35379394/

相关文章:

python - Fabric python 框架中的多主机、多凭据

python - 随机采样和 Pandas 数据框

python - 需要使用两列纬度和经度合并两个 Pandas 数据框

python - 将计算值/差值除以先前值 -> 'slope'

haskell - Haskell 中的除法,类型类

python - numpy 对象数组

python - 带字符串的滚动总和

python - 在 python 中-如何将多个 HTML 源代码保存到一个文本文件中

python - 使用 pandas 数据框计算百分比变化的绝对值

c - 为什么这个运算等于1?