Python Pandas:numpy.where具有多个条件的逻辑
Python数据科学新手 下面是我的原始数据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
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来添加新的条件。非常感谢你。