应用于pd系列的函数(?)

2024-05-13 10:34:41 发布

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

现状。 我不知道我的函数是否正确,以及如何“应用”到pd系列

功能:

def levels(row):
if row.between(0,3):
    return "basic"
elif row.between(3.01, 8.5):
    return "intermediate"
else:
    return "advanced"

我的系列:测试结果[“点”]外观:

    1            3.0
Book1            0.0
Maja             1.0
Michal.Faron     0.0
Solutions       10.0
Name: Points, dtype: float64

我试过:

test_result['LEVEL']=test_result["Points"].apply(levels)

我希望在末尾添加一列:根据函数中的if条件使用字符串进行级别设置


Tags: 函数test功能returnifbasicdefresult
2条回答

如果应用于大型数据集,速度会非常慢。建议使用面罩或loc

df['level'] = 'advanced'
df.loc[3.01 <= df.points < 8.5, 'level'] = 'intermediate'
df.loc[0 <= df.points < 3.01, 'level'] = 'basic'

应该快得多

编辑

哦,我原以为那样行得通,但是不行。用这个代替

df.loc[(df.points >= 3.01) & (df.points < 8.5), 'level'] = 'intermediate'
df.loc[(df.points >= 0) & (df.points < 3.01), 'level'] = 'basic'

问题是row是一个float,而float没有between方法。如果确实要使用它,可以将其转换回熊猫系列:

def levels(row):
    if pd.Series([row]).between(0,3)[0]:
        return "basic"
    elif pd.Series([row]).between(3.01, 8.5)[0]:
        return "intermediate"
    else:
        return "advanced"

相关问题 更多 >