如何将新数值匹配到Pandas已有分类分箱区间
Pandas分箱规则复用方案
核心实现直接使用Pandas原生的pd.cut()复用原有分箱规则即可,无需手写if-elif判断函数,是向量化操作,性能远高于自定义函数逐行判断。
场景1:保留了最初分箱的分界点参数
如果你当初执行分箱时用到的bins数组还在,直接复用该参数给新数据分箱即可:
import pandas as pd # 你最初分箱时定义的分界点,和你的现有区间完全匹配 original_bins = [12.999, 25.0, 38.0, 55.0, 218.0] # 给新数据列A执行分箱,得到的区间和原有统计结果完全一致 new_df["A_bin"] = pd.cut(new_df["A"], bins=original_bins)
场景2:没有保留原始分界点,仅存现有value_counts结果
可以从现有统计结果的区间索引中自动提取分界点,再调用pd.cut():
# 你已有的分箱统计结果 vc = df["A"].value_counts() # 提取所有区间边界并排序,得到原始分箱分界点 bound_set = set() for interval in vc.index: bound_set.add(interval.left) bound_set.add(interval.right) original_bins = sorted(bound_set) # 给新数据分箱 new_df["A_bin"] = pd.cut(new_df["A"], bins=original_bins)
补充说明
pd.cut()默认是左开右闭的区间规则,和你现有分箱的区间格式完全匹配,无需额外调整参数。如果你当初分箱时修改过right、include_lowest等参数,复用的时候传入相同参数即可。- 如果需要输出和你
value_counts()里完全一致的字符串格式的区间,加一步new_df["A_bin"] = new_df["A_bin"].astype(str)即可。
内容的提问来源于stack exchange,提问作者qaiser
相关产品推荐
相关产品推荐

