python - 'If-Elif-Else' 函数返回真值不明确 - Pandas Dataframe
问题描述
尝试运行一个函数将房屋年龄分成某些类别,然后使用结果在原始数据框中创建一个新列。这是 IF 语句的代码:
def sort_age(data):
if (data["housing_median_age"] > 40) :
return ('Cat 5')
elif ((30 <= data["housing_median_age"]) & (data["housing_median_age"] <= 40)) :
return ('Cat 4')
elif ((20 <= data["housing_median_age"]) & (data["housing_median_age"] < 30)) :
return ('Cat 3')
elif (10 <= data["housing_median_age"] < 20) :
return ('Cat 2')
elif (0 <= data["housing_median_age"] < 10) :
return ('Cat 1')
else:
return ('None')
# Here's the code for the new column:
p1data['age_category'] = p1data.apply(lambda x: sort_age(p1data), axis = 1)
错误消息如下所示:
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')
解决方案
要执行此类分类,请使用专用于这种情况的函数,即pd.cut。代码可以是:
p1data['age_category'] = pd.cut(p1data.housing_median_age,
bins=[0, 10, 20, 30, 40.001, 200], right=False,
labels=['Cat 1', 'Cat 2', 'Cat 3', 'Cat 4', 'Cat 5'])
细节:
bins
垃圾箱边缘。请注意一些不规则性:所有值都是整数,但其中之一是40.001,提供该值40将被归类为Cat 4。right=False
- 使箱子在右侧打开。
他的解决方案的优点是分配的名称只是Pandas 类别,即使它们的名称没有按字母顺序排列,它们的逻辑顺序也将在任何排序后保持。
推荐阅读
- django - 如何在测试期间将 django 视图 GET 请求的响应插入到与 POST 请求相同的视图中?
- node.js - 我不知道为什么这段代码一直跳过一个循环
- java - 在什么情况下 ApplicationEventPublisher.publishEvent 不会触发?
- c++ - c++ 指针数组和内存地址分配
- java - 如何配置 Spring Boot 应用程序以在 application.properties 的占位符中将空字符串“”视为 null
- ansible - 如何附加到您要附加的字符串在剧中动态构造的列表
- sql - 当它们进入时将非数字设置为空
- javascript - 如何在 Google 表格上将值从一列复制到另一列?
- sql - oracle SQL 关键字不是预期的 - REPLACE 运算符有问题?
- html - 如何在ios PWA上显示offline.html