首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据多列上的条件创建一个具有3个输出的列

如何根据多列上的条件创建一个具有3个输出的列
EN

Stack Overflow用户
提问于 2017-02-08 19:28:28
回答 1查看 141关注 0票数 2

我有DataFrame df:

代码语言:javascript
复制
def fake_data():
     return{'Name': fake.name(), 
         'Gender': random.choice(sex_list),
         'Address': fake.street_address(), 
         'Nationality': 'Zimbabwean', 
         'Account_Type': random.choice(accounts_list), 
         'Age': random.randint(0, 2), 
         'Education': random.random() > 0.5, 
         'Employment': random.randint(0, 2),
         'Salary': random.randint(0, 2),
         'Employer_Stability': random.random() > 0.5,
         'Consistency': random.random() > 0.5,
         'Balance': random.randint(0, 2),
         'Residential_Status': random.random() > 0.5
      }

我想要创建一个列Service_Level,它是0或1或2,这取决于列的条件;

代码语言:javascript
复制
columns = ['Age','Education', 'Employment', 'Salary', 'Employer_Stability', 'Consistency', 'Balance', 'Residential_Status']

在阅读了一些答案之后,我尝试使用以下内容创建['Service_Level'] =0;

代码语言:javascript
复制
df['Service_Level'] = np.where((df['Age']==0)&(df['Education']==False)&(df['Employment']==0)&(df['Salary']==0)&(df['Employer_Stability']==False)&(df['Consistency']==False)&(df['Balance']==0)&(df['Residential_Status']==False),
                               (df['Age'])|(df['Education'])|(df['Employment'])|(df['Salary'])|(df['Employer_Stability'])|(df['Consistency'])|(df['Balance'])|(df['Residential_Status']), 0)

那么这个对于['Service_Level'] =1

代码语言:javascript
复制
df['Service_Level'] = np.where((df['Age']==1)&(df['Education']==True)&(df['Employment']==1)&(df['Salary']==1)&(df['Employer_Stability']==False)&(df['Consistency']==True)&(df['Balance']==1)&(df['Residential_Status']==True),
                               (df['Age'])|(df['Education'])|(df['Employment'])|(df['Salary'])|(df['Employer_Stability'])|(df['Consistency'])|(df['Balance'])|(df['Residential_Status']), 1)

那么这个对于['Service_Level'] =2

代码语言:javascript
复制
df['Service_Level'] = np.where((df['Age']==2)&(df['Education']==True)&(df['Employment']==2)&(df['Salary']==2)&(df['Employer_Stability']==True)&(df['Consistency']==True)&(df['Balance']==2)&(df['Residential_Status']==True),
                               (df['Age'])|(df['Education'])|(df['Employment'])|(df['Salary'])|(df['Employer_Stability'])|(df['Consistency'])|(df['Balance'])|(df['Residential_Status']), 2)

不幸的是,我不知道如何加入这些条件,以便得到0、1或2。

如果有效的话,那些不遵循这些条件的州会发生什么呢?我也想生产和生产

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-08 19:41:29

您可能需要结合使用切片与np.where (顺便说一下,这需要三个参数,条件,val1(如果条件为真),val2)

你的第一次陈述

代码语言:javascript
复制
df['Service_Level'] = np.where(condtion_1, 0, 1)

这将导致df‘’Service_Level‘,对于满足第一个条件的行和满足第一个条件的行都是0,否则为1。

现在,您可以掩蔽数据,只获取service_level不为0的行。

代码语言:javascript
复制
df[df['Service_Level'] !=0] 

在这个dataframe上,您可以使用

代码语言:javascript
复制
np.where(condition_2, 1,2) 

将条件为true的1分配给df‘’Service_Level‘,并将2分配给其余行。

编辑:

您可以在第一个容器中使用带有第二个condtion的np.where,如下所示。

代码语言:javascript
复制
df['Service_Level'] = np.where(cond_1, 0, (np.where(cond_2, 1,2)))

为了获得更好的可读性,您可能需要首先将条件保存为cond_1等,然后在np.where中使用它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42121980

复制
相关文章

相似问题

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