pd.cut分箱后如何将分箱标识及对应概率值映射回原pandas DataFrame
实现方案
你可以按照以下步骤直接把分箱信息和对应概率映射回原DataFrame:
- 直接把
pd.cut()的返回结果赋值为原DataFrame的新列:pd.cut()返回的序列长度和原输入列完全一致,每个元素对应原行的所属分箱,无需额外匹配。 - 用
value_counts(normalize=True)直接计算各分箱的概率,替代手动除以总长度的写法,结果更准确。 - 通过
map()方法把分箱对应的概率匹配到原数据集的每一行。
完整可运行代码(适配你提供的样本数据)
import pandas as pd # 读取样本数据,实际使用时替换为你自己的DataFrame即可 df = pd.read_csv("你的样本文件路径.csv") # 1. 新增分箱列,直接存储每行对应的分箱区间 # 如果你处理的是main列,替换为 df['main_bin'] = pd.cut(df['main'], bins=10) df['temp_bin'] = pd.cut(df['Max Temp (°C)'], bins=10) # 2. 计算每个分箱对应的出现概率 bin_prob = df['temp_bin'].value_counts(normalize=True) # 3. 新增概率列,把分箱对应的概率映射回每一行 df['bin_probability'] = df['temp_bin'].map(bin_prob)
可选优化
如果你不想用区间作为分箱标识,可在pd.cut中添加labels参数自定义分箱名称,示例:
# 自定义分箱名为 分箱1~分箱10 df['temp_bin'] = pd.cut(df['Max Temp (°C)'], bins=10, labels=[f"分箱{i+1}" for i in range(10)])
运行完成后你直接查看原DataFrame,就能看到每行都新增了所属分箱和对应概率两个字段。
内容的提问来源于stack exchange,提问作者grandpa
相关产品推荐
相关产品推荐

