You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中用qcut批量分箱数值变量的循环与ID保留问题求助

解决方案

问题分析

原代码的核心问题:

  • 循环内直接替换原df为单列分箱结果,导致后续循环丢失其他变量和ID,无法完成遍历
  • 没有单独维护包含ID的结果数据集,导致最终无法保留ID

修正后的完整代码

import pandas as pd
import numpy as np

# 创建示例df
df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8,9,10],
'totals1':[200, 100, 300, 500, 1000, 50, 250, 550, 350, 950],
'totals2':[4500, 700, 600, 500, 900, 500, 150, 650, 450, 950]})

# 将id转换为object类型
df = df.astype({'id' : np.object})

# 获取数值变量列表
num_vars = df.select_dtypes(include=['int64']).columns.tolist()

# 初始化结果DataFrame,仅保留ID列
result_df = df[['id']].copy()

# 遍历所有数值变量执行分箱
for var in num_vars:
    # 定义分箱后列名(原变量名+_seg)
    seg_col = f"{var}_seg"
    # 用qcut分箱,labels=False返回0/1/2的分箱标识,添加到结果集
    result_df[seg_col] = pd.qcut(df[var], 3, labels=False)

# 查看最终结果
print(result_df)

关键改进点

  • 单独创建result_df存储结果,避免覆盖原数据,确保循环能持续读取原df中的数值变量
  • 分箱列自动命名为原变量名+_seg,便于识别
  • 最终结果仅保留ID和所有分箱后的变量,完全符合需求

可选扩展:自定义分箱标签

如果需要用文字标签(如「低/中/高」)替代数字标识,只需修改qcut的labels参数:

result_df[seg_col] = pd.qcut(df[var], 3, labels=['低', '中', '高'])

内容的提问来源于stack exchange,提问作者BenBald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:45:32