首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过检查python dataframe中的多条elif语句来创建新列

通过检查python dataframe中的多条elif语句来创建新列
EN

Stack Overflow用户
提问于 2019-07-23 23:37:40
回答 1查看 55关注 0票数 0

我正在尝试通过检查Reason字符串列的内容来创建一个新的字符串列FailureType。我正在检查列Reason是否包含Trip,Lock,Fail等。如果'Reason‘包含Trip,那么应该用Trip填充新列FailureType,依此类推。

定义故障分类的函数

代码语言:javascript
复制
def failure_cat(df):
    
    for reason in df['Reason']:
        
        df['Reason'].str.contains("trip") == True
        
        if any(df['Reason'].str.contains("trip")):
            df['FailureType'] = "Trip"
        
        elif any(df['Reason'].str.contains("lock")):
            df['FailureType'] = "Locked Out"
              
        elif any(df['Reason'].str.contains("force")):
            df['FailureType'] = "Forced Outage"
        
        elif any(df['Reason'].str.contains("Blow")):
            df['FailureType'] = "Blown Out"  
    
        else:
            df['FailureType'] = "Other" 
    
        return df

cap_bank['FailureType']

生成结果:

代码语言:javascript
复制
0      Trip
1      Trip
2      Trip
3      Trip
4      Trip
5      Trip
6      Trip
7      Trip
8      Trip
9      Trip
10     Trip
11     Trip
12     Trip
13     Trip
14     Trip
15     Trip
16     Trip
17     Trip
18     Trip
19     Trip
20     Trip
21     Trip
22     Trip

列'Reason‘看起来像这样:0上限。银行失败1家银行已两次跳闸。2银行已两次跳闸。3 cap银行跳闸并锁定服务。4个故障的绝缘子和反应堆造成火灾在…5盖板跳闸修复问题6 01/07/08: 11:00左右发生强制跳闸。7帽银行被绊倒并被锁在门外。8失败的351a继电器xfmr保护9失败的351a继电器xfmr保护10修复慢跳盖组11修复慢跳盖组12修复慢跳盖组13修复慢跳盖组。将取代ro..。14修复慢速脱扣盖板。将取代ro..。15个故障的绝缘子和反应堆造成火灾…

因此,我正在检查列'Reason‘中是否包含trip、lock等,并在此基础上填充新创建的列'FailureType’。但是所有行都填充了值Trip,但事实并非如此。我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-24 02:56:14

当您运行代码时

代码语言:javascript
复制
df['FailureType'] = "Trip"

它将值Trip赋值给列FailureType中的所有行。我认为发生的情况是dataset的最后一行包含trip,这导致循环结束时该列的值为Trip

您想要做的是使用lambda,例如

代码语言:javascript
复制
def get_failure_type(reason):
    if 'trip' in reason:
       return 'Trip'
    elif 'lock' in reason:
        return 'Locked Out'
    return 'Other'

df['FailureType'] = df['Reason'].apply(lambda x: get_failure_type(x))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57167719

复制
相关文章

相似问题

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