如何按列名、其他列值与索引范围替换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
相关产品推荐
相关产品推荐

