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

Pandas创建分位数列报错:Index不支持可变操作及问题排查

问题分析与解决

错误原因

报错的核心是误用了DataFrame的columns属性:

  • all_merged_pre_matrix.columns返回的是Pandas的Index对象,这类对象是不可变的,不支持直接通过索引赋值修改。
  • 你成功运行的代码是直接给DataFrame添加/修改列(all_merged_pre_matrix['Decile3'] = ...),这才是操作DataFrame列的正确方式。

修正后的代码

把报错代码中的columns去掉,改成和成功代码一致的写法即可:

all_merged_pre_matrix['Decile4'] = pd.qcut(all_merged_pre_matrix['min_score'], 5, labels=False)

后续生成好坏样本的分位数交叉表

假设你的数据中有标识好坏样本的列(比如is_bad,用1代表坏样本、0代表好样本),可以用pd.crosstab生成5×5的交叉表:

1. 坏样本数量交叉表

# 按min_score分位数(Decile4)和app_score分位数(Decile3)统计坏样本数量
cross_tab_bad = pd.crosstab(
    index=all_merged_pre_matrix['Decile4'],
    columns=all_merged_pre_matrix['Decile3'],
    values=all_merged_pre_matrix[all_merged_pre_matrix['is_bad'] == 1]['is_bad'],
    aggfunc='count',
    margins=False  # 不需要合计行/列时设为False
)

2. 好样本数量交叉表

cross_tab_good = pd.crosstab(
    index=all_merged_pre_matrix['Decile4'],
    columns=all_merged_pre_matrix['Decile3'],
    values=all_merged_pre_matrix[all_merged_pre_matrix['is_bad'] == 0]['is_bad'],
    aggfunc='count',
    margins=False
)

如果需要查看分位数组合的好坏样本占比,可调整代码计算占比:

# 按行归一化,查看每行分位数组合的坏样本占比
cross_tab_bad_pct = pd.crosstab(
    index=all_merged_pre_matrix['Decile4'],
    columns=all_merged_pre_matrix['Decile3'],
    values=all_merged_pre_matrix['is_bad'],
    aggfunc='mean',
    margins=False
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:53:19