Python Pandas:如何正确复刻aux_35变量的生成逻辑?
复刻aux_35变量的解决方案
问题说明
需要根据以下规则复刻aux_35变量:
- 从
pdt_050数组中取值 - 当
tob为0或1时,取数组第一个元素 - 当
tob大于pdt_050数组长度时,取数组最后一个元素 - 若
tob介于2和数组长度之间(含等于长度),取数组中对应tob-1索引的元素(适配示例中的实际取值情况)
原编写的函数逻辑错误,无法得到正确结果。
原函数错误分析
- 列引用错误:错误将目标变量
aux_35转为整数当作索引,而非使用规则指定的tob列值 - 逻辑判断偏差:用
try-except捕获索引异常的方式不符合规则要求,应根据tob的取值范围做明确条件判断 - 循环逻辑错误:遍历过程中错误调用
aux_35的值,完全偏离了规则依赖tob的核心逻辑
修正后的代码
def generate_aux_35(row): pdt_array = row['pdt_050'] tob_val = row['tob'] array_len = len(pdt_array) if tob_val in (0, 1): return pdt_array[0] elif tob_val > array_len: return pdt_array[-1] else: # 适配tob在2到数组长度之间的情况,取对应索引(tob-1) return pdt_array[tob_val - 1] # 生成复刻变量 df['replica'] = df.apply(generate_aux_35, axis=1)
结果验证
运行上述代码后,replica列与原aux_35列完全匹配:
# 查看对比结果 print(df[['aux_35', 'replica']])
输出:
aux_35 replica 0 0.683522 0.683522 1 0.683522 0.683522 2 0.683522 0.683522 3 0.726501 0.726501 4 0.726501 0.726501 5 0.596246 0.596246 6 0.159139 0.159139 7 0.258350 0.258350 8 0.582035 0.582035 9 0.373269 0.373269 10 0.583463 0.583463 11 0.436349 0.436349
内容的提问来源于stack exchange,提问作者dsilva
相关产品推荐
相关产品推荐

