首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用条件不传递的函数if...else语句

使用条件不传递的函数if...else语句
EN

Stack Overflow用户
提问于 2021-08-22 14:04:06
回答 1查看 93关注 0票数 0

我的输入(例如):

代码语言:javascript
复制
df = pd.DataFrame({'frame':[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],'sum_result_ICV':[0,1,1,1,2,2,2,2,1,1,1,1,1,1,1,0], 'sum_result_AO':[0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0]})
dd['result_ICV'] = 0
dd['result_ATO'] = 0

我的代码和my_func:

代码语言:javascript
复制
for z in range(0,len(cv_details)):
            def result_func(row):
                for i in range(0,len(dd)):
                    if row==2:
                        return(cv_details[z])
                    elif row==1:
                        if dd.loc[dd['sum_result_'+cv_details[z]]==2,'frame'].empty:
                            return ('ReviewNG-'+cv_details[z])
                        elif (dd['frame'][i]-dd.loc[dd.iloc[:,z+1]==2,'frame'].iloc[0]) <=3 :
                            return('NG-'+cv_details[z])                                
                        elif (dd['frame'][i]-dd.loc[dd.iloc[:,z+1]==2,'frame'].iloc[-1]) <=3 :  
                             return('NG-'+cv_details[z]) 
                        else:
                             return('ReviewNG-'+cv_details[z])
                    elif row==0:
                        return('Other')
                    else:
                        return ""
            dd.iloc[:,z+3]=dd.iloc[:,z+1].apply(result_func)

我希望:

但我的产出:

因此,您可以看到:我需要一些条件,例如:“如果sum_result_ICV等于0 ->将" other ",如果'sum_result_ICV‘等于1和差( Frame减号,其中第一个/最后一个Frame==2)等于或小于3 ->,则在其他明智的”ReviewNG“中放置”NG“(例如frame 11的编号在sum_result_ICV中为1,距离frame的编号7为sum_result_ICV等于2,所以11-7>3放置”ReviewNG“)。在我的示例中,从1到3的frame必须是“NG”,也是从8到10,但从11到14必须是"ReviewBG-ICV“。另外,请看图,我期望从我的功能。那我做错了什么?

基于UPDATE的@woblob回答

循环的新代码:

代码语言:javascript
复制
for z in range(0,len(cv_details)):
    df.iloc[df.iloc[:,z+1].to_numpy()==0, z+2 ] = 'Other'
    mask2= df.iloc[:,z+1]==2
    mask1 =df.iloc[:,z+1]==1
    df.iloc[mask2,z+2]=cv_details[z]
    if df.loc[mask2,'frame'].empty:
        df.iloc[mask1,z+2]='ReviewNG-'+cv_details[z]
    else:
        df_frame_first=df.loc[mask2,'frame'].iloc[0]
        df_frame_last=df.loc[mask2,'frame'] .iloc[-1]  
        mask_lt_3 = ((df.frame - df_frame_first) <= 3) | (df.frame - df_frame_last <= 3)
        ones_lt_3 = mask1 & mask_lt_3
        ones_not_lt_3 = mask1 & (~mask_lt_3)
        df.iloc[ones_lt_3, z+2] = 'NG-'+cv_details[z]
        df.iloc[ones_not_lt_3 , z+2] = 'ReviewNG-'+cv_details[z]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-22 15:44:54

当我试图理清逻辑时,我彻底地重新设计了它。

代码语言:javascript
复制
dd.loc[dd.result == 0, "sum_result"] = 'Other'
mask2 = dd.result == 2 
mask1 = dd.result == 1
dd.loc[mask2, "sum_result"] = 'ICV'
if dd.loc[mask2,'frame'].empty:
    dd.loc[mask1, "sum_result"] = 'No sum_result==2'
else:
    dd_frame_first = dd.loc[mask2,'frame'].iloc[0]
    dd_frame_last = dd.loc[mask2,'frame'].iloc[-1]    
    mask_lt_3 = ((dd.frame - dd_frame_first) <= 3) | (dd.frame - dd_frame_last <= 3)
    ones_lt_3 = mask1 & mask_lt_3
    ones_not_lt_3 = mask1 & (~mask_lt_3)
    dd.loc[ones_lt_3, "sum_result"] = 'NG-ICV'
    dd.loc[ones_not_lt_3 , "sum_result"] = 'ReviewNG-ICV'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68882045

复制
相关文章

相似问题

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