熊猫数据框中转换函数的百分比

时间:2017-05-18 15:21:49

标签: python pandas dataframe

我看到一个用于将交叉表值转换为百分比的函数,代码为:

我真的很困惑ser/float(ser[-1])的含义是什么。什么是ser [-1]意味着,以及此代码如何将数据转换为百分比。

https://www.analyticsvidhya.com/blog/2016/01/12-pandas-techniques-python-data-manipulation/

1 个答案:

答案 0 :(得分:5)

这意味着将每列除以列的最后一个值(All行的值),并将其转换为float

您可以通过以下方式查看:

def percConvert(ser):
    print (ser)
    print (ser[-1])
    return ser / float(ser[-1])

但可以使用crosstab中的参数normalize=0简化解决方案(仅删除一列的列):

df1 = pd.crosstab(data['Credit_History'],data['Loan_Status'], margins=True, normalize=0)

样品:

np.random.seed(123)
N = 100
data = pd.DataFrame({'Loan_Status': np.random.choice(['Y','N'], N),
                   'Credit_History':np.random.choice([0., 1.], N)})
#print (data)

def percConvert(ser):
    return ser / float(ser[-1])

df1 = pd.crosstab(data['Credit_History'],data['Loan_Status'], margins=True, normalize=0)
print (df1)
Loan_Status            N         Y
Credit_History                    
0.0             0.489362  0.510638
1.0             0.415094  0.584906
All             0.450000  0.550000

df1 = pd.crosstab(data['Credit_History'],data['Loan_Status'], margins=True)
        .apply(percConvert, axis=1)
print (df1)
Loan_Status            N         Y  All
Credit_History                         
0.0             0.489362  0.510638  1.0
1.0             0.415094  0.584906  1.0
All             0.450000  0.550000  1.0