首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多变量的np.where

多变量的np.where
EN

Stack Overflow用户
提问于 2017-08-10 09:37:16
回答 2查看 2K关注 0票数 1

我有一个数据框架:

代码语言:javascript
复制
customer_id [1,2,3,4,5,6,7,8,9,10]
feature1 [0,0,1,1,0,0,1,1,0,0]
feature2 [1,0,1,0,1,0,1,0,1,0]
feature3 [0,0,1,0,0,0,1,0,0,0]

使用这个函数,我想创建一个新变量(比如new_var)来表示功能1是1,然后是new_var=1,如果feature_2=1然后是new_var=2,那么feature3=1则是new_var=3 thing 4。我尝试了np.where,但是它没有给出错误,但是它没有做正确的事情--所以我想嵌套的np.where只在单个变量上工作。在这种情况下,在熊猫中执行嵌套if/case的最佳方法是什么?

我的np.where代码是这样的:

代码语言:javascript
复制
df[new_var]=np.where(df['feature1']==1,'1', np.where(df['feature2']==1,'2', np.where(df[feature3']==1,'3','4')))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-10 09:39:28

我认为您需要numpy.select -它首先选择True值,其他值都不重要:

代码语言:javascript
复制
m1 = df['feature1']==1 
m2 = df['feature2']==1    
m3 = df['feature3']==1 
df['new_var'] = np.select([m1, m2, m3], ['1', '2', '3'], default='4')

样本

代码语言:javascript
复制
customer_id = [1,2,3,4,5,6,7,8,9,10]
feature1 = [0,0,1,1,0,0,1,1,0,0]
feature2 = [1,0,1,0,1,0,1,0,1,0]
feature3  = [0,0,1,0,0,0,1,0,0,0]

df = pd.DataFrame({'customer_id':customer_id,
                   'feature1':feature1,
                   'feature2':feature2,
                   'feature3':feature3})

m1 = df['feature1']==1 
m2 = df['feature2']==1    
m3 = df['feature3']==1 
df['new_var'] = np.select([m1, m2, m3], ['1', '2', '3'], default='4')
print (df)
   customer_id  feature1  feature2  feature3 new_var
0            1         0         1         0       2
1            2         0         0         0       4
2            3         1         1         1       1
3            4         1         0         0       1
4            5         0         1         0       2
5            6         0         0         0       4
6            7         1         1         1       1
7            8         1         0         0       1
8            9         0         1         0       2
9           10         0         0         0       4

如果在features中只有10是可能的,则将0转换为False,将1转换为True

代码语言:javascript
复制
m1 = df['feature1'].astype(bool)
m2 = df['feature2'].astype(bool)
m3 = df['feature3'].astype(bool)
df['new_var'] = np.select([m1, m2, m3], ['1', '2', '3'], default='4')
print (df)
   customer_id  feature1  feature2  feature3 new_var
0            1         0         1         0       2
1            2         0         0         0       4
2            3         1         1         1       1
3            4         1         0         0       1
4            5         0         1         0       2
5            6         0         0         0       4
6            7         1         1         1       1
7            8         1         0         0       1
8            9         0         1         0       2
9           10         0         0         0       4
票数 1
EN

Stack Overflow用户

发布于 2021-07-22 19:34:59

尝试:

代码语言:javascript
复制
df['new_var']=np.where(df['feature3']==1, '3', '4')
df['new_var']=np.where(df['feature2']==1,'2', df['new_var'])
df['new_var']=np.where(df['feature1']==1, '1', df['new_var'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45609903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档