2017-07-18 23 views
1

我有一個數據幀,我檢查是否它是所有列中的Y,否則返回N,並且如果行中的所有列都爲空則返回Null。熊貓檢查多個條件的條件

di = {'col1': [None, 'Y', 'N'], 'col2': [None, 'Y', 'N'], 'col3': [None, 'N', 'N']} 
df = pd.Dataframe(di) 
df['test'] = pd.np.where(df[['col1', 'col2', 'col3']].eq('Y').any(1, skipna=True), 'Y', 'N') 

這回:

col1 col2 col3 test 
0 None None None N 
1  Y  Y  N Y 
2  N  N  N N 

而且我想它返回

col1 col2 col3 test 
0 None None None None 
1  Y  Y  N Y 
2  N  N  N N 

回答

2

你可以用另一numpy.where裏面檢查NULL條件:

df['test'] = pd.np.where(df[['col1', 'col2', 'col3']].eq('Y').any(1, skipna=True), 'Y', 
      pd.np.where(df[['col1', 'col2', 'col3']].isnull().all(1), None, 'N')) 

df 
# col1 col2 col3 test 
#0 None None None None 
#1  Y  Y  N  Y 
#2  N  N  N  N 
1

只需添加此最後一行,

di = {'col1': [None, 'Y', 'N'], 'col2': [None, 'Y', 'N'], 'col3': [None, 'N', 'N']} 
df = pd.DataFrame(di) 
df['test'] = pd.np.where(df[['col1', 'col2', 'col3']].eq('Y').any(1, skipna=True), 'Y', 'N') 
df['test'] = pd.np.where(df[['col1', 'col2', 'col3']].isnull().all(1, skipna=True), None, df['test'])