Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:numpy.where具有多个条件的逻辑_Python_Pandas_Numpy - Fatal编程技术网

Python Pandas:numpy.where具有多个条件的逻辑

Python Pandas:numpy.where具有多个条件的逻辑,python,pandas,numpy,Python,Pandas,Numpy,Python数据科学新手 下面是我的原始数据 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.wher

Python数据科学新手

下面是我的原始数据

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
def my_-fun(var1、var2、var3、var4):
df[var4]=np.其中((df[var1]=='true',
df[var3]=“鸡蛋”,
df[var2]<10),
“你好”,
"泽洛")
返回df

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

首先使用布尔值
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\u和.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
def my_-fun(var1、var2、var3、var4):
条件=(df[var1],df[var3]=‘鸡蛋’,df[var2]<10)
df[var4]=np.where(np.logical_和.reduce(conds),'hello','zello')
返回df

“但不工作”-请包含完整的错误消息。另外,您可能应该使用
True
False
而不是
“True”
“False”
。更不用说
True
而不是
“True”
您也可以使用
numpy。所有
都带有
参数,或者只
&
两次。@jpp对于像这样的少量数据,可能没有什么区别,但是如果有任何显著的数据,
np.logical_和
将在缩减过程中浪费大量的时间来处理序列对象(可能是因为它没有针对按位and这样的数据进行优化)。当然,您可以在任何地方使用
.values
来避免这种情况,但这会变得非常冗长。@jpp非常有效。可以在np中添加附加条件。在哪里?(df[var1].values=='true')&(df[var3].values=='egs')&(df[var2].values==10),'equal'@jpp我接受你的答案。但是,我可以通过添加附加的np.where来添加新的条件。非常感谢你。