在Pandas中处理重复值:为股票价格列重复值添加微小增量
哈哈,这个场景我太熟悉了!之前做量化分析的时候也碰到过类似的重复值导致merge出问题的情况,用pandas的groupby加cumcount组合操作就能完美解决,而且逻辑很清晰。
先给你整个完整的代码示例,直接套用就行:
首先构造你的示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'Date': ['1-12-2020', '2-12-2020', '3-12-2020', '4-12-2020'], 'High': [515, 525, 515, 530], 'Low': [505, 515, 510, 505] })
然后处理重复值,给非首次出现的重复项加上0.0025:
# 指定需要处理的列 cols_to_adjust = ['High', 'Low'] for col in cols_to_adjust: # 按列中的数值分组,计算每个组内的行出现顺序(从0开始计数) occurrence_count = df.groupby(col).cumcount() # 只有非首次出现的行(count > 0)才加上0.0025 df[col] = df[col] + occurrence_count * 0.0025
运行完之后,你打印df就能得到你想要的结果:
| Date | High | Low |
|---|---|---|
| 1-12-2020 | 515.0 | 505.0 |
| 2-12-2020 | 525.0 | 515.0 |
| 3-12-2020 | 515.0025 | 510.0 |
| 4-12-2020 | 530.0 | 505.0025 |
补充说明:
如果你的数据里有多次重复(比如某个数值出现3次及以上),上面的代码会给第二次加0.0025,第三次加0.005,以此类推。要是你希望不管重复多少次,所有非首次的都只加0.0025,那把代码里的occurrence_count * 0.0025改成(occurrence_count > 0).astype(int) * 0.0025就行,这样不管重复几次,非首次的都只加一次0.0025。
这个方法的核心是用cumcount()追踪每个数值在列中的出现顺序,然后根据顺序来调整数值,既保留了原数据的意义,又避免了重复值带来的merge问题。
内容的提问来源于stack exchange,提问作者Animesh Shah
相关产品推荐
相关产品推荐

