Python:当使用整数测试时,函数可以工作,但不在apply()lambda函数中

2024-06-25 07:09:15 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的职责:

def recommendation(row):
    if row['fitness_discipline'] == 'Cycling':
        if (row.avg_workout_length > row.total_workout_length) & (row.next_class == 'last'):                
            filtered_classes = classes[(classes.fitness_discipline != row.prev_class) & (classes.fitness_discipline != row.fitness_discipline)& (classes.class_length < row.avg_workout_length*0.5)].sort_values(by='times_taken',ascending=False)
            if filtered_classes.empty:
                reco= ''
            else:
                reco = filtered_classes.iloc[0]['class'] + ', ' + filtered_classes.iloc[1]['class'] + ', '+ filtered_classes.iloc[-1]['class']
            return reco
        elif (row.total_workout_length >= row.avg_workout_length) & (row.next_class == 'last'):
            filtered_classes = classes[(classes.fitness_discipline != row.prev_class) & (classes.fitness_discipline != row.fitness_discipline)& (classes.class_length <= 15)].sort_values(by='times_taken',ascending=False)
            if filtered_classes.empty:
                reco= ''
            else:
                reco = filtered_classes.iloc[0]['class'] + ', ' + filtered_classes.iloc[1]['class'] + ', '+ filtered_classes.iloc[-1]['class']
            return reco
        return None
    return None

上面的内容仅用于上下文,因为当我运行它时,它会按照它应该的方式完美地运行。换句话说,当我测试它时:

recommendation(df.iloc[12345])

其中“12345”是数据帧“df”中的一个随机索引,我得到了我想要的字符串的确切输出

然后,当我这样做时:

df['new_column'] = df.apply(lambda x: recommendation(x),axis=1)

我希望在df中创建一个新列,它接受每一行并应用函数,根据每一行将结果输出到“new_column”列中。但是无论我尝试什么,它都失败了,我通常会得到

IndexError: single positional indexer is out-of-bounds'

作为一个错误


Tags: dfreturniflengthfilteredclassclassesrow