如何基于数据框列按指定分箱规则生成二进制虚拟变量(以年龄为例)
实现方案
你可以用Python的pandas库或者R的tidyverse系列工具快速实现,以下是两种常用语言的可运行代码:
Python(pandas)实现
核心逻辑是先用pd.cut()完成年龄分箱,再用pd.get_dummies()生成虚拟变量后合并回原表:
import pandas as pd # 构造示例数据框 df = pd.DataFrame({ 'ID': [1,2,3,4,5,6,7], 'Age': [32,58,39,67,72,74,23] }) # 定义分箱边界和对应标签 bins = [17, 34, 50, 64, float('inf')] labels = ['Age1', 'Age2', 'Age3', 'Age4'] # 生成虚拟变量并合并 df = pd.concat([ df, pd.get_dummies(pd.cut(df['Age'], bins=bins, labels=labels), dtype=int) ], axis=1) print(df)
运行后输出的结果和你预期的完全一致。
R实现
用dplyr+tidyr的组合实现,逻辑和pandas版本一致:
library(dplyr) library(tidyr) # 构造示例数据框 df <- data.frame( ID = 1:7, Age = c(32,58,39,67,72,74,23) ) # 分箱+生成虚拟变量 df <- df %>% mutate(age_group = cut(Age, breaks = c(17, 34, 50, 64, Inf), labels = c("Age1", "Age2", "Age3", "Age4"))) %>% pivot_wider(names_from = age_group, values_from = age_group, values_fn = ~ as.integer(!is.na(.)), values_fill = 0) print(df)
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

