如何在Pandas DataFrame中替换值为1的行后第24行的值为-1
解决Pandas DataFrame指定行替换问题
完整实现代码
import pandas as pd # 创建示例DataFrame s = pd.Series([1, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1, 1, 0, -1, 0, 0, 1, 0, 0, -1, 1, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0], name='position_short') df = pd.DataFrame(s) df.index = range(7, 108) # 1. 获取所有值为1的行的索引 source_indices = df[df['position_short'] == 1].index # 2. 计算目标索引(当前索引+24) target_indices = [idx + 24 for idx in source_indices] # 3. 过滤掉DataFrame索引范围外的目标索引,避免报错 valid_target_indices = [idx for idx in target_indices if idx in df.index] # 4. 将目标索引位置的值设为-1 df.loc[valid_target_indices, 'position_short'] = -1 # 查看指定范围的结果 print(df.loc[7:36])
代码说明
- 精准定位所有值为1的行的索引,作为后续操作的基础
- 直接对源索引做加法计算目标索引,确保定位到"往后第24行"的位置
- 增加索引有效性过滤,防止因目标索引超出DataFrame范围导致报错
- 使用
.loc进行赋值操作,这是Pandas中修改指定行数据的安全规范方式
运行结果
position_short Bar numbers 7 1 8 -1 9 0 10 0 11 0 12 1 13 0 14 0 15 -1 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 -1 32 1 33 0 34 0 35 0 36 -1
完全符合预期:索引7对应的目标索引31被替换为-1,索引12对应的目标索引36原本就是-1,赋值后保持不变。
内容的提问来源于stack exchange,提问作者Chung Joshua
相关产品推荐
相关产品推荐

