如何判断DataFrame中年龄是否在指定区间并新增分组列?
问题解决:DataFrame年龄筛选与分组
一、原代码的问题分析与修正
你写的代码之所以一直输出Yes,是因为df['Age'].between(0, 10, inclusive=True).any()是检查整个Age列里是否存在至少一个符合0-10区间的值——只要列里有一个满足条件,循环的每一次都会触发print('Yes'),完全没用到当前遍历的i。
修正方案(推荐矢量化操作,比循环高效)
如果要标记每个年龄是否在0-10区间,直接生成布尔列即可:
# 新增一列标记是否在0-10区间 df['is_0_10'] = df['Age'].between(0, 10, inclusive=True) # 查看结果 print(df[['Age', 'is_0_10']])
如果非要用循环(不推荐,pandas原生操作远快于循环),要判断当前的i:
x = df['Age'] for i in x: print('Yes' if 0 <= i <= 10 else 'No')
二、实现年龄分组(新增分组列)
用pd.cut()函数可以快速完成分箱分组,这是pandas处理这类需求的标准方法:
import pandas as pd # 定义分组区间和对应标签,可根据实际需求调整 bins = [0, 10, 20, 30, 100] # 最后一个值设为数据中最大年龄即可 labels = ['0-10', '11-20', '21-30', '31+'] # 新增年龄分组列 df['Age_Group'] = pd.cut(df['Age'], bins=bins, labels=labels, include_lowest=True)
include_lowest=True确保第一个区间包含0这个最小值- 如果你的数据里有小数年龄(比如1.5岁),这个方法也能正常处理
内容的提问来源于stack exchange,提问作者Randomletters
相关产品推荐
相关产品推荐

