2016-05-17 132 views
1

這與this question非常相似,除了我希望我的代碼能夠應用於數據幀的長度而不是特定的列。pandas:追加行小計的新列

我有一個DataFrame,我試圖獲得每行的總和作爲一列添加到數據框。

df = pd.DataFrame([[1,0,0],[20,7,1],[63,13,5]],columns=['drinking','drugs','both'],index = ['First','Second','Third']) 

     drinking drugs both 
First   1  0  0 
Second  20  7  1 
Third   63  13  5 

所需的輸出:

 drinking drugs both total 
First   1  0  0  1 
Second  20  7  1  28 
Third   63  13  5  81 

當前代碼:

df['total'] = df.apply(lambda row: (row['drinking'] + row['drugs'] + row['both']),axis=1) 

這個偉大的工程。但是如果我有另外一個數據框,有七列,不叫'飲酒','毒品'或'兩者'呢?是否可以調整此函數以適用於數據幀的長度?這樣,我可以使用該函數來處理任何數據框,列數不盡相同,而不僅僅是一個名爲'drinking','drug'和'both'的列的數據框?

喜歡的東西:

df['total'] = df.apply(for col in df: [code to calculate sum of each row]),axis=1) 

回答

2

您可以使用sum

df['total'] = df.sum(axis=1) 

如果你需要總結某些列,使用子集:

df['total'] = df[['drinking', 'drugs', 'both']].sum(axis=1) 
0

怎麼樣這樣的:

df.loc[:, 'Total'] = df.sum(axis=1) 

與輸出:

Out[4]: 
     drinking drugs both Total 
First   1  0  0  1 
Second  20  7  1  28 
Third   63  13  5  81 

它將由行和所有列。