2017-04-09 36 views
1
df = pd.DataFrame({ 
'key1':[np.nan,'a','b','b','a'], 
'data1':[2,5,8,5,7], 
'key2':['ab', 'aa', np.nan, np.nan, 'one'], 
'data2':[1,5,9,6,3], 
'Sum over columns':[1,10,8,5,10]}) 

大家喜在Python專欄,請你幫我看看以下問題: 我試圖總結在列獲得數據1和數據2的總和。如何總結基於列的有沒有空字符串

如果帶有字符串(key1)的列不是NaN,並且如果帶有字符串(key2)的列不是NaN,則會求和data1和data2。我想要的結果顯示在總和列中。感謝您的幫助!

+0

你有NaN或* string * NaN嗎? (你原來的帖子使它看起來像前者,但你的新代碼顯然是後者。) – DSM

+0

嗨,我的意思是NaN不是'NaN' –

回答

0

嘗試使用上axis=1df.apply方法和numpy陣列乘法函數來獲得所需輸出:

import numpy as np 
import pandas as pd 


df = pd.DataFrame({ 
'key1':[np.nan,'a','b','b','a'], 
'data1':[2,5,8,5,7], 
'key2':['ab', 'aa', np.nan, np.nan, 'one'], 
'data2':[1,5,9,6,3]}) 

df['Sum over columns'] = df.apply(lambda x: np.multiply(x[0:2], ~x[2:4].isnull()).sum(), axis=1) 

或者:

df['Sum over columns'] = np.multiply(df[['data1','data2']], ~df[['key1','key2']].isnull()).sum(axis=1) 

無論是他們中的一個應該產生:

# data1 data2 key1 key2 Sum over columns 
# 0  2  1 NaN ab     1 
# 1  5  5 a aa    10 
# 2  8  9 b NaN     8 
# 3  5  6 b NaN     5 
# 4  7  3 a one    10 

我希望這有助於。

+0

這很有效!謝謝! –

+0

@ mile.d,如果這對你有用,請考慮用回答旁邊的複選標記標記它。 – Abdou