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

如何基于迭代方法为pandas DataFrame的number列0值按顺序编号

错误原因分析

原有代码的问题出在循环体的赋值逻辑:每次循环都会匹配当前DataFrame内所有值为0的行统一赋值,第一次循环i=0时就把全部0都修改为1,后续循环已经没有可匹配的0值,自然无法按顺序生成编号。

迭代方案实现

单独维护一个计数器,仅在遍历到值为0的行时递增计数器并赋值即可:

import pandas as pd

df = pd.DataFrame({
    'first_name': ['John', 'Jane', 'Marry', 'Victoria', 'Gabriel', 'Layla'],
    'last_name': ['Smith', 'Doe', 'Jackson', 'Smith', 'Brown', 'Martinez'],
    'number': [0, 29, 0, 52, 0, 0]})

# 计数器初始值为1,对应第一个0的替换值
zero_counter = 1
for idx, row in df.iterrows():
    if row['number'] == 0:
        df.loc[idx, 'number'] = zero_counter
        zero_counter += 1

运行后输出结果:

first_name last_name  number
0       John     Smith       1
1       Jane       Doe      29
2      Marry   Jackson       2
3   Victoria     Smith      52
4    Gabriel     Brown       3
5      Layla  Martinez       4

可选向量化方案(非迭代,更高性能)

如果不限制必须用迭代实现,pandas原生向量化操作效率更高:

df['number'] = df['number'].where(df['number'] != 0, (df['number'] == 0).cumsum())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 05:57:04