pandas 缺失数据的百分比变化
pandas percentage change with missing data
我需要获取多列的百分比变化。
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)
在未来的残酷世界中,没有更多的好东西 children,这是一个问题,因为我得到 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
我需要获取多列的百分比变化。
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)
在未来的残酷世界中,没有更多的好东西 children,这是一个问题,因为我得到 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