2017-04-09 32 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