如何基于参考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
相关产品推荐
相关产品推荐

