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

如何按comment列条件调整Pandas DataFrame的number列值

解决方案

步骤说明

  1. 转换数据类型:先将number列从字符串转为整数,方便后续数值计算。
  2. 标记替换行:识别comment列以Replacing: 开头的行,这类行的number无需调整(已与被替换文件保持一致)。
  3. 计算偏移量:针对非替换行,统计每个number值的重复出现次数,以此作为需要递增的偏移量。
  4. 生成最终编号:原始number加上对应偏移量,得到符合要求的结果。

完整代码

import pandas as pd

# 初始化测试数据
df_test = pd.DataFrame(data=None, columns=['file','comment','number'])
df_test.file = ['file_1', 'file_1_v2', 'file_2', 'file_3', 'file_4', 'file_4_v2', 'file_5']
df_test.comment = ['old', 'Replacing: file_1', 'none', 'new: 3', 'maybe', 'Replacing: file_4', 'none']
df_test.number = df_test.number.astype(int)  # 转换为整数类型

# 标记comment以'Replacing: '开头的行
is_replacing = df_test.comment.str.startswith('Replacing: ')

# 计算非替换行的偏移量:每个number值累计出现次数减1
temp_non_replacing = df_test.loc[~is_replacing, 'number'].reset_index(drop=True)
offsets = temp_non_replacing.groupby(temp_non_replacing).cumcount()

# 将偏移量赋值回原DataFrame
df_test['offset'] = 0
df_test.loc[~is_replacing, 'offset'] = offsets.values

# 生成最终number列
df_test['final_number'] = df_test['number'] + df_test['offset']

# 查看结果
print(df_test['final_number'].tolist())
# 输出: [12, 12, 13, 14, 15, 15, 16]

代码解释

  • is_replacing掩码:快速筛选出无需调整的替换行,避免干扰后续计算。
  • cumcount()方法:对每个分组内的行进行计数,重复出现的行会得到递增的计数,正好作为需要递增的偏移量(比如number=13在非替换行中第二次出现时,计数为1,所以13+1=14)。
  • 偏移量赋值:通过索引对齐将计算好的偏移量映射回原DataFrame,确保只有非替换行应用偏移。

内容的提问来源于stack exchange,提问作者Marcus K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:32:12