Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 丢失数据时的百分比变化_Python_Pandas_Division_Percentage - Fatal编程技术网

Python 丢失数据时的百分比变化

Python 丢失数据时的百分比变化,python,pandas,division,percentage,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=p

我需要得到多个列的百分比变化

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)
在未来残酷的世界里,再也没有好孩子了,这是一个问题,因为我得到的是
NaN
,而不是
-1
(-100%):


在一般情况下如何解决这一问题?我是否需要提前附加0填充的缺失列?或者有另一种方法来获得百分比变化

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

另一种方法是使用函数中的
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

最简单的方法可能是确保当年有一列“Good”和零。谢谢,我无法理解
dropna
参数如何影响结果。
dropna=False
出于某种原因删除列级别名称。看起来像只虫子。
>>> (pv[2020]/pv[1987]).fillna(0) - 1
Behaviour  Bad  Good
Child               
Boy          1    -1
Girl         1    -1
>>> 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