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

如何通过循环将所有列除以survival_time生成clv_mean前缀新列?

问题分析与解决方案

你的代码存在两个核心问题:

  1. 不必要的双层循环:你的需求是将指定列表的每一列单独除以survival_time,不需要两两列配对的嵌套循环,当前的双层循环完全偏离了需求逻辑。
  2. 错误覆盖原DataFrame:循环里执行df = df[i] * df['survival_time']会把原DataFrame覆盖成一个Series,后续再给df添加新列必然报错,而且你实际需要的是除法而非乘法。

正确实现代码

import pandas as pd

# 假设你的原DataFrame是df,保留原数据不覆盖
list_ib = ['actor_masterylevel', 'churn_yn', 'old_value2_num', 'old_value3_num','old_value4_num', 'time']

for col in list_ib:
    # 生成符合要求的新列名
    new_col_name = f'clv_mean_{col}'
    # 执行除法计算并添加新列到原DataFrame
    df[new_col_name] = df[col] / df['survival_time']

额外注意事项

如果survival_time列存在0值,直接除法会触发报错,可添加判断处理这种情况:

df[new_col_name] = df.apply(lambda row: row[col] / row['survival_time'] if row['survival_time'] != 0 else 0, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:05:32