如何在Python中对含年份列的DataFrame按指定规则分箱?
解决方法
这里提供三种实用的方法来实现年份分类,你可以根据需求选择:
方法1:使用pd.cut(适合区间划分场景)
pd.cut专门用于将连续数值划分为离散区间,非常适合这种年份区间分类的场景:
import pandas as pd # 创建示例DataFrame df = pd.DataFrame({'year': range(2010, 2024)}) # 定义区间边界和对应标签 bins = [2009, 2014, 2020, 2023] labels = ['old', 'medium', 'new'] # 新增分类列 df['year_category'] = pd.cut(df['year'], bins=bins, labels=labels, include_lowest=True) # 查看结果 print(df)
bins设置区间边界:2009(确保2010被包含)、2014、2020、2023include_lowest=True保证左端点2010被划入第一个区间- 运行后会直接生成对应分类列
方法2:使用np.select(灵活多条件判断)
如果需要更灵活的条件定义,np.select可以按自定义条件匹配标签:
import pandas as pd import numpy as np df = pd.DataFrame({'year': range(2010, 2024)}) # 定义条件列表和对应标签列表 conditions = [ df['year'].between(2010, 2014), df['year'].between(2015, 2020), df['year'].between(2021, 2023) ] choices = ['old', 'medium', 'new'] df['year_category'] = np.select(conditions, choices) print(df)
- 每个条件对应一个区间,顺序和标签列表一一对应
- 适合条件复杂或非连续区间的场景
方法3:自定义函数+apply(直观易懂)
如果喜欢更直观的逻辑写法,可以自定义函数后用apply处理:
import pandas as pd df = pd.DataFrame({'year': range(2010, 2024)}) def categorize_year(year): if 2010 <= year <= 2014: return 'old' elif 2015 <= year <= 2020: return 'medium' elif 2021 <= year <= 2023: return 'new' df['year_category'] = df['year'].apply(categorize_year) print(df)
- 逻辑清晰,容易理解和修改
- 适合需要加入额外复杂判断的场景
内容的提问来源于stack exchange,提问作者ntwong
相关产品推荐
相关产品推荐

