如何基于Pandas DataFrame前序数字为缺失值分配连续编号?
解决Pandas DataFrame按规则填充空值的问题
嘿,我来帮你搞定这个空值填充的需求!咱们先把需求再明确下:
- 如果空值(你用的
None)出现在序列开头,就从99901开始依次递增编号 - 如果空值前面的数字是
90,就把这个空值设为91 - 其他位置的空值(比如前面是别的数字),我默认按「前序数字+1」处理,如果不是你要的逻辑,可以随时调整~
第一步:先构造测试用的DataFrame
先模拟你的数据场景,包含开头的空值和90后面的空值:
import pandas as pd # 构造示例数据,包含开头None、90后的None,以及其他数字后的None df = pd.DataFrame({'col': [None, None, 90, None, 80, None]})
第二步:实现填充逻辑
这里用循环的方式,逻辑清晰易懂,适合新手理解:
# 初始化开头空值的起始编号 start_num = 99901 # 遍历每一行处理空值 for idx in range(len(df)): current_val = df.loc[idx, 'col'] # 判断当前值是否为空(兼容Python的None和Pandas的NA) if pd.isna(current_val): # 处理开头的连续空值:第一行 或者 前一行也是空值 if idx == 0 or pd.isna(df.loc[idx-1, 'col']): df.loc[idx, 'col'] = start_num start_num += 1 else: prev_val = df.loc[idx-1, 'col'] # 如果前序数字是90,填充91 if prev_val == 90: df.loc[idx, 'col'] = 91 # 其他情况默认前序数字+1,可根据你的需求修改 else: df.loc[idx, 'col'] = prev_val + 1
第三步:查看处理结果
运行完上面的代码后,你的DataFrame会变成这样:
col 0 99901.0 1 99902.0 2 90.0 3 91.0 4 80.0 5 81.0
小提示
如果你的DataFrame里的空值是Python原生的None,建议先转成Pandas的pd.NA,这样pd.isna()能更准确识别:
df['col'] = df['col'].replace({None: pd.NA})
内容的提问来源于stack exchange,提问作者yanci
相关产品推荐
相关产品推荐

