pandas 如何创建状态基于值的新列[重复]

qnzebej0  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(87)

此问题在此处已有答案

I'm getting an IndentationError (or a TabError). How do I fix it?(6个回答)
24天前关闭
我有以下Pandas的图片

Suburb       Percentile Rank
Hume          0.20464135
Clayton       0.409162146
Moorabin      0.654550934
St Kilda      0.80464135
Point Cook   1.505447257

字符串
我想根据“Percentile Rank”列值创建一个名为Rank classifier的新列。
规则应该是这样的;

perc_rank <= 0.2 then 'Very Low', 
perc_rank > 0.2 and perc_rank <= 0.4 then 'Low', 
perc_rank > 0.4 and perc_rank <= 0.6 then 'Medium', 
perc_rank > 0.6 and perc_rank <= 0.8 then 'High', 
perc_rank > 0.8 and perc_rank <= 1.0 then 'Very High'


我能够在SQL中生成Classifier输出。但无法使用Python创建新列。
尝试了这个;

def Rank Classifier

     if (perc_rank  <= 0.2):
               Rank Classifier = "Very Low"
            elif (perc_rank > 2) & (perc_rank <= 0.4):
                Rank Classifier = "Low"
            elif (perc_rank > 0.4) & (perc_rank  <= 0.6):
                Rank Classifier = "Medium"
            elif (perc_rank  > 0.6) & (perc_rank <= 0.8):
                Rank Classifier = "High"
            elif (perc_rank > 8) & (perc_rank <=1 ):
                Rank Classifier = "Very High"
                
        else:
            return Rank Classifier


收到错误
IndentationError:未匹配任何外部缩进级别
希望在名为“Rank Classifier”的新列中返回分类器数据
输出如下所示:

Suburb  Percentile Rank  Rank Classifier
Hume        0.20464135      Very Low
Clayton     0.409162146     Low
Moorabin    0.654550934    Medium
St Kilda    0.80464135     High
Point Cook  1.505447257    Very High

3zwjbxry

3zwjbxry1#

而不是应用一个函数,看看使用pandas.cut
下面的代码将给你给予你所期望的结果,但你可能需要调整的东西。

bins = [0.2, 0.4, 0.6, 0.8, 1, np.inf]
labels = ['Very Low', 'Low', 'Medium', 'High', 'Very High']

df['Rank Classifier'] = pd.cut(df['Percentile Rank'], bins=bins, labels=labels)

字符串
注意,就像我说的,上面的给予你想要的输出,你在问题中指出。
但是,我不确定所需的输出是否正确。
例如,Hume不应该被归类为Low而不是Very Low
另外,Point Cook怎么会有Percentile Rank为1.505447257?
我觉得你应该检查一下你的标准。
P.S. bin列表应该从0开始,最后一个值应该是1。

bins = [0, 0.2, 0.4, 0.6, 0.8, 1]

ukdjmx9f

ukdjmx9f2#

尝试使用apply

def RankClassifier(perc_rank):
    if (perc_rank  <= 0.2):
        return "Very Low"
    elif (perc_rank > 2) & (perc_rank <= 0.4):
        return "Low"
    elif (perc_rank > 0.4) & (perc_rank  <= 0.6):
        return "Medium"
    elif (perc_rank  > 0.6) & (perc_rank <= 0.8):
        return "High"
    elif (perc_rank > 8) & (perc_rank <=1 ):
        return "Very High"       
    else:
        return RankClassifier
    
df['Rank Classifier']= df['Percentile Rank'].apply(Classifier)

字符串

相关问题