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

如何基于参考pandas DataFrame创建新数据框并按规则填充SOV列值

Pandas按区间反向填充SOV列实现方法

需求说明

现有存储为df的pandas DataFrame,原始数据结构如下:
示例原数据框

需要修改原DataFrame或生成新DataFrame,将df['SOV']列展开为覆盖1-80所有整数的序列,目标效果如下:
示例目标数据框

填充规则:

  • SOV=5对应的行值,反向填充SOV为1-5的所有行
  • SOV=10对应的行值,反向填充SOV为6-10的所有行
  • 后续所有长度为5的连续区间,均按上述规则用区间右端点对应的行值填充整个区间

实现代码

import pandas as pd
import numpy as np

# 生成1-80全量SOV值的基础表
full_df = pd.DataFrame({'SOV': range(1, 81)})

# 计算每个SOV所属区间对应的填充参考值(区间右端点,即向上取最近的5的倍数)
full_df['ref_sov'] = (np.ceil(full_df['SOV'] / 5) * 5).astype(int)

# 关联原表取对应区间的填充值,自动完成全区间填充
result = full_df.merge(
    df, 
    left_on='ref_sov', 
    right_on='SOV', 
    suffixes=('', '_ref')
)
# 保留目标列:展开后的SOV列 + 原df除SOV外的所有业务列
result = result[['SOV'] + [col for col in df.columns if col != 'SOV']]

逻辑说明

  • 用np.ceil做区间映射:1-5的所有数统一映射到参考值5,6-10统一映射到参考值10,一直到76-80映射到80,完全匹配区间划分规则
  • merge操作会自动把原df中每个参考SOV对应的整行数据,匹配给同区间的所有SOV行,不需要逐行循环,执行效率高
  • 最终输出的result就是符合要求的新DataFrame,如果需要覆盖原变量,直接执行df = result即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:27:51