如何用For循环为Pandas DataFrame重复值累加固定整数并指定列名?
解决方案
原代码的问题分析
- 仅对比当前行与上一行的值,无法处理连续3个及以上的重复值(比如第3个1000会和修改后的1025对比,不相等就不会累加)
- 使用列索引而非列名,代码鲁棒性差(列顺序变化就会出错)
修正后的For循环代码
import pandas as pd # 初始化原始DataFrame df = pd.DataFrame({'Rounds':[1000,1000,1000,1000,3000,3000,4000,5000,6000,6000]}) # 保存原始Rounds值的副本,避免修改后丢失原始值 original_rounds = df['Rounds'].copy() # 用于记录每个原始值已出现的次数 seen_counts = {} # 遍历每一行 for idx in df.index: current_original_val = original_rounds[idx] if current_original_val not in seen_counts: # 首次出现,计数设为0 seen_counts[current_original_val] = 0 else: # 非首次出现,计数加1 seen_counts[current_original_val] += 1 # 更新当前行的Rounds值 df.loc[idx, 'Rounds'] = current_original_val + 25 * seen_counts[current_original_val] print(df)
代码说明
- 保存原始值副本:避免修改DataFrame后无法获取原始重复值
- 计数字典:
seen_counts跟踪每个原始值已出现的次数,首次出现时计数为0,后续每次出现计数加1 - 累加逻辑:当前行的值 = 原始值 + 25 × 已出现次数,确保每重复一次就累加25
运行结果
执行后得到的DataFrame与目标完全一致:
Rounds 0 1000 1 1025 2 1050 3 1075 4 3000 5 3025 6 4000 7 5000 8 6000 9 6025
内容的提问来源于stack exchange,提问作者kokoroko
相关产品推荐
相关产品推荐

