如何根据值创建具有状态的新列
我有以下熊猫数据框
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]