代码之家  ›  专栏  ›  技术社区  ›  JAG2024

python函数中用于在其他两个条件中创建基于列的新条件的语法无效

  •  1
  • JAG2024  · 技术社区  · 8 年前

    我一直收到错误信息 SyntaxError: invalid syntax 我想知道(1)这是为什么,以及(2)如何修复我的函数,使它按我的要求工作。

    d = {'Relationship': ['Male', 'Female','Spouse','Spouse','Male','Spouse','Male','Male','Male','Spouse','Female'], 'Sex': ['Male', 'Female','Female','Male','Male','Female','Male','Male','Male','Female','Female']}
    df = pd.DataFrame(data=d)
    df
    
    Relationship    Sex
    Male            Male
    Female          Female
    Spouse          Female
    Spouse          Male
    Male            Male
    Spouse          Female
    Male            Male
    Male            Male
    Male            Male
    Spouse          Female
    Female          Female
    

    我想要的是 Spouse 填上所列的异性 df['Sex'] . 所以测向仪应该是这样的:

    df
    
    Relationship    Sex
    Male            Male
    Female          Female
    Male            Female
    Female          Male
    Male            Male
    Male            Female
    Male            Male
    Male            Male
    Male            Male
    Male            Female
    Female          Female
    

    def typex(column):
        if column['Relationship']!='Spouse' & column['Sex']! ='Female':
            return 'Male'
        elif column['Relationship']!='Spouse' & column['Sex']! ='Male':
            return 'Female'
    
    df.loc[:,'Relationship'] = df.apply(typex, axis=1)
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   JAG2024    8 年前

    我建议使用 numpy.select

    m1 = (df['Relationship']!='Spouse') & (df['Sex']!='Female')
    m2 = (df['Relationship']!='Spouse') & (df['Sex']!='Male')
    
    df['new'] = np.select([m1, m2], ['Male','Female'], default='not matched') 
    

    但是如果你想用你的代码改变 & and because working with scalars

    def typex(column):
        if (column['Relationship']=='Spouse') and (column['Sex']=='Female'):
            return 'Male'
        elif (column['Relationship']=='Spouse') and (column['Sex']='Male'):
            return 'Female'
    
    df['new'] = df.apply(typex, axis=1)