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

如何在Pandas DataFrame中按行重置含"A"的单元格数字序号

解决方案

初始数据

import pandas as pd

data = {'column1': ['A1', 'A1', 'A1', 'A1'],
        'column2': ['A9', 'A1', 'A8', 'A1'],
        'column3': ['D1', 'D1', 'D1', 'D1'],
        'column4': ['A6', 'A2', 'A3', 'A4'],
        'column5': ['H1', 'H1', 'H1', 'H1'],
        'column6': ['A4', '', '', 'A3'],
        'column7': ['A5', '', '', 'A9']}

df = pd.DataFrame(data)

初始表格:

column1column2column3column4column5column6column7
A1A9D1A6H1A4A5
A1A1D1A2H1
A1A8D1A3H1
A1A1D1A4H1A3A9

需求

按行重置所有包含"A"的值的数字部分,从A1开始;若同一行中再次出现A1,则保留该单元格内容,继续处理下一个单元格;不含"A"的值和空白单元格需忽略。

实现代码

def process_row(row):
    a_count = 0
    has_a1 = False
    processed = []
    for val in row:
        if val == '':
            processed.append(val)
            continue
        if not val.startswith('A'):
            processed.append(val)
            continue
        if val == 'A1':
            if not has_a1:
                has_a1 = True
                a_count = 1
            processed.append(val)
        else:
            a_count += 1
            processed.append(f'A{a_count}')
    return pd.Series(processed, index=row.index)

df_processed = df.apply(process_row, axis=1)

处理后结果

column1column2column3column4column5column6column7
A1A2D1A3H1A4A5
A1A1D1A2H1
A1A2D1A3H1
A1A1D1A2H1A3A4

代码说明

  • 定义process_row函数处理单行数据:
    • 用a_count记录当前要分配的A序号,has_a1标记该行是否已出现过A1
    • 遍历每个单元格:
      • 空白单元格直接保留
      • 非A开头的单元格直接保留原内容
      • 遇到"A1"时,若首次出现则标记并初始化序号为1,直接保留"A1";非首次出现也直接保留
      • 其他A开头的单元格,序号自增后生成新的"A+数字"格式内容
  • 使用df.apply(..., axis=1)按行应用处理函数,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:05:12