Python数据科学新手求助:Pandas中numpy.where多条件逻辑实现问题
解决你的numpy.where多条件问题
嘿,作为Python数据科学新手遇到这种问题太正常了,我来帮你捋清楚哪里出问题,再给你修正后的代码~
首先看你写的np.where部分,这里犯了一个常见小错误:多个条件不能用逗号分隔,np.where的第一个参数需要是单一的布尔数组,多个条件得用逻辑运算符(&表示“且”,|表示“或”)连接,而且每个条件都要加括号,避免运算符优先级搞乱逻辑。
另外你函数里用var4指定新列名的思路是对的,咱们把条件部分修正就行。假设你想要的是三个条件同时满足(var1等于'true'、var3等于'eggs'、var2小于10)时返回'hello',否则返回'zello',修正后的代码如下:
import pandas as pd import numpy as np # 你的原始数据 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 # 调用函数测试 result_df = my_fun('var1', 'var2', 'var3', 'new_col') print(result_df)
运行后输出结果:
var1 var2 var3 new_col 0 true 10 eggs zello 1 false 20 milk zello 2 ture 50 eggs zello
额外提个小细节:你的原始数据里var1有个拼写错误ture(正确是true),如果需要匹配这个错误拼写的值,可以把条件改成df[var1].isin(['true', 'ture']),这样两种拼写都能被识别到,比如:
df[var4] = np.where( (df[var1].isin(['true', 'ture'])) & (df[var3] == 'eggs') & (df[var2] < 10), 'hello', 'zello' )
内容的提问来源于stack exchange,提问作者Murali
相关产品推荐
相关产品推荐

