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

Psy*_*uck 2 python dataframe pandas

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

我真的很困惑ser/float(ser[-1])。ser [-1]的含义以及该代码如何将数据转换为百分比。

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

jez*_*ael 5

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

您可以通过以下方式进行检查:

def percConvert(ser):
    print (ser)
    print (ser[-1])
    return ser / float(ser[-1])
Run Code Online (Sandbox Code Playgroud)

但是,可以使用参数normalize=0in 简化解决方案crosstab(删除仅包含一个的列):

df1 = pd.crosstab(data['Credit_History'],data['Loan_Status'], margins=True, normalize=0)
Run Code Online (Sandbox Code Playgroud)

样品:

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
Run Code Online (Sandbox Code Playgroud)