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

如何按列名、其他列值与索引范围替换Pandas DataFrame指定列值

实现代码

import pandas as pd
import numpy as np

# 构造原始DataFrame(补充索引设置,和示例结构一致)
d = {'A': [1,2,3,4,5,6,7,8,9,10],
     'B': [1,2,3,4,5,6,7,8,9,10],
     'C': [1,2,3,4,5,6,7,8,9,10],
     'D': ['one','one','one','one','one','two','two','two','two','two']}
df = pd.DataFrame(data=d)
df.index = [50.0, 50.2, 50.4, 50.6, 50.8, 51.0, 51.2, 51.4, 51.6, 51.8]
offsets = [[0.4, 0.6, 0.8], [0.2, 0.4, 0.6]]

# 定义处理顺序:目标列、D列分组和offsets顺序一一对应
target_cols = ['A', 'B', 'C']
group_order = ['one', 'two']

# 逐分组、逐列处理,直接修改原df
for group, offset_list in zip(group_order, offsets):
    group_max_idx = df[df['D'] == group].index.max()
    for col, offset in zip(target_cols, offset_list):
        threshold = group_max_idx - offset
        df.loc[(df['D'] == group) & (df.index > threshold), col] = np.nan

逻辑说明

  • 所有操作直接在原df对象上执行,不会生成新的DataFrame,符合要求。
  • 计算逻辑严格匹配规则:先取每个D列分组的最大索引(分组最底部的索引值),减去对应列的偏移量得到阈值,将当前分组内索引大于阈值的行的对应列设为nan。
  • 最终输出的结果和给出的预期效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:54:05