如何让其他DataFrame复用已有DataFrame通过pd.cut生成的划分区间
解决方案
核心逻辑是固定第一次分箱的区间边界,后续分箱时直接复用该边界,避免pandas根据新数据重新计算区间。
方法1:首次分箱时同步获取边界(推荐)
调用pd.cut时添加retbins=True参数,会同时返回分箱结果和区间边界数组,直接保存这个数组后续复用即可:
import pandas as pd # 示例df1构造代码 ages=[35.000000, 2.000000, 27.000000, 14.000000, 4.000000, 58.000000, 20.000000, 39.000000, 14.000000, 55.000000, 2.000000, 29.699118] values=[1,0,1,1,0,0,0,1,0,0,1,1] df1=pd.DataFrame() df1['ages']=ages df1['values']=values # 分箱同时获取区间边界 df1['age_groups'], age_bins = pd.cut(df1.ages, 4, retbins=True)
后续给其他DataFrame(比如df2)分箱时,直接传入保存的age_bins即可:
df2['age_groups'] = pd.cut(df2.ages, bins=age_bins)
方法2:从已有的分箱结果提取边界
如果你已经完成了df1的分箱操作,没有提前保存边界,可以直接从已生成的分箱列中提取边界:
# 从df1的分箱列提取区间对象 interval_list = df1['age_groups'].cat.categories # 组装为边界数组 age_bins = [interval_list[0].left] + [interval.right for interval in interval_list] # 给df2分箱 df2['age_groups'] = pd.cut(df2.ages, bins=age_bins)
注意事项
如果新DataFrame的ages列存在超出原始区间范围的数值,默认会被标记为NaN,你可以根据业务需求提前过滤异常值,或者调整pd.cut的include_lowest、right等参数适配场景。
内容的提问来源于stack exchange,提问作者john johns
相关产品推荐
相关产品推荐

