如何根据值创建具有状态的新列

我有以下熊猫数据框

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

我想根据“百分比等级”列值创建一个名为“等级分类器”的新列。

规则看起来像这样;

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 中生成分类器输出。但是无法使用 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:unindent 与任何外部缩进级别不匹配”

想在名为“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

任何帮助,将不胜感激 !!!

提前致谢

回答

而不是应用函数查看使用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 Rank1.505447257?

我认为你需要检查你的标准。

PS bins 列表应该真正从 0 开始,最后一个值应该是 1。

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


以上是如何根据值创建具有状态的新列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>