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

如何将DataFrame的be/me值分配到另一DataFrame生成的十分位?

pandas按年度分位数区间匹配全量数据实现方案

核心逻辑

你需要先从每年6月的df2数据中提取对应年份的be/me十分位分割边界,再用该边界对全量df的同年度be/me值做分箱匹配即可,完全不需要手动遍历提取区间最值。

实现代码

第一步:基础字段准备

# 给两个表新增年份匹配字段
df['match_year'] = df['date'].dt.year
df2['match_year'] = df2['date'].dt.year

如果你是财年规则(当年6月分位数对应当年7月到次年6月数据),把年份生成逻辑替换为df['match_year'] = df['date'].dt.to_period('Q-JUN').dt.year即可自动对齐财年。

第二步:批量匹配生成十分位列

df['deciles'] = df.groupby('match_year')['be/me'].transform(
    lambda x: pd.cut(
        x,
        # 取对应年份df2的be/me值计算十分位边界,和你之前df2的生成逻辑完全对齐
        bins=pd.qcut(
            df2.loc[df2['match_year'] == x.name, 'be/me'],
            10,
            retbins=True,
            duplicates='drop'
        )[1],
        labels=False,
        include_lowest=True
    )
)

性能说明

120万行数据用groupby + transform的向量化实现,运行速度远快于行遍历或者自定义apply函数,实测耗时不会超过2秒。

结果校验

你可以随机抽一年6月的df数据和df2对比,两者的deciles值完全一致,证明匹配逻辑正确。

内容的提问来源于stack exchange,提问作者Gonçalo Franchini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:04