熊猫:具有多种条件的numpy.where逻辑

时间:2018-03-23 02:14:24

标签: python pandas numpy

Python数据科学新手

以下是我的Raw_data

raw_data = {'var1': ['true','false','ture'],'var2': [10,20,50], 'var3':['eggs','milk','eggs']}
df = pd.DataFrame(raw_data, columns = ['var1','var2','var3'])`

经验丰富的代码但不能正常工作

def my_fun (var1,var2,var3,var4):
    df[var4]= np.where((df[var1] == 'true', 
                       df[var3] == 'eggs',
                       df[var2] < 10),
                       'hello',
                       'zello')
return df

这里我喜欢使用var1,var2和var3条件并获得条件结果。请帮忙

1 个答案:

答案 0 :(得分:2)

首先使用布尔True / False而不是字符串来简化逻辑。要将此转换应用于系列'var1'

df['var1'] = df['var1'] == 'true'

然后,您可以使用按位运算符&来比较布尔系列:

def my_fun (var1,var2,var3,var4):
    df[var4]= np.where(df[var1] & df[var3].eq('eggs') & df[var2].lt(10),
                       'hello', 'zello')
    return df

效率较低的替代方法是使用np.logical_and.reduce

def my_fun (var1,var2,var3,var4):
    conds = (df[var1], df[var3] == 'eggs', df[var2] < 10)
    df[var4]= np.where(np.logical_and.reduce(conds), 'hello', 'zello')
    return df