如何通过循环将所有列除以survival_time生成clv_mean前缀新列?
问题分析与解决方案
你的代码存在两个核心问题:
- 不必要的双层循环:你的需求是将指定列表的每一列单独除以
survival_time,不需要两两列配对的嵌套循环,当前的双层循环完全偏离了需求逻辑。 - 错误覆盖原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
相关产品推荐
相关产品推荐

