2016-09-27 95 views
2

我有一张5列的表:AWA,REM,S1,S2和SWS。我计算了每列和每行的总和。还有这些价值的百分比。但为了获得百分比,我重复了同一行5次。 有超过5列的情况下有改进它的方法吗?如何获得熊猫表中每个值的百分比?

这是我的代码,我也附上了一张图片。

import pandas as pd 

    df = pd.DataFrame(TABLA, columns=('AWA', 'REM', 'S1', 'S2', 'SWS')) 
    df.index='s' + (df.index+1).astype(str) 
    df['xSubject'] = df.sum(axis=1) #sums each colummn 

    ######Here starts the repetition: 
    df['AWA%'] = df['AWA']/df['AWA'].sum()*100 
    df['REM%'] = df['REM']/df['REM'].sum()*100 
    df['S1%'] = df['S1']/df['S1'].sum()*100 
    df['S2%'] = df['S2']/df['S2'].sum()*100 
    df['SWS%'] = df['SWS']/df['SWS'].sum()*100 
    df['xSubject%'] = df['xSubject']/df['xSubject'].sum()*100 
    ######Here ends the repetition: 

    df.loc['xStage'] = df.sum() #sums each row 

    df 

enter image description here

回答

2

使用pd.concat与重建

pd.concat([df, 
      pd.DataFrame(df.div(df.sum()).values * 100, 
         columns=df.columns.values + '%')], 
      axis=1) 

考虑pd.DataFramedf

df = pd.DataFrame(np.random.rand(10, 5), 
        columns=('AWA', 'REM', 'S1', 'S2', 'SWS')) 

df 

enter image description here

%计算

df.div(df.sum()) 

enter image description here

然后,使用上述代码

pd.concat([df, 
      pd.DataFrame(df.div(df.sum()).values * 100, 
         columns=df.columns.values + '%')], 
      axis=1) 

enter image description here

+0

我也希望每列的最后一行中的总和。 'df.loc ['xEstado'] = df.sum()'不再起作用,也不起作用:'xEstado = df.sum()' 'df = df.append(xEstado,ignore_index = True)'' – Aizzaac

相关问题