基于哑变量pandas DataFrame修改原DataFrame指定列值并应用惩罚系数
实现方法
你可以利用pandas的矩阵运算和numpy的广播特性快速完成计算,核心逻辑是先构造和原DataFrame结构一致的增量矩阵,仅哑变量为1的位置有需要叠加的数值,其余位置为0,直接和原DataFrame相加即可得到结果:
import pandas as pd import numpy as np # 初始数据 original_to_insert = pd.DataFrame({'col1': [10, 10, 10], 'col2': [10, 10, 10], 'col3': [10, 10, 10]}) df_true_false_dummies = pd.DataFrame({'col1': [1, 0, 1], 'col2': [0, 1, 0], 'col3': [0, 0, 0]}) value_to_add = np.array([5, 4, 2]) penalty = 0.95 # 核心计算逻辑 add_matrix = df_true_false_dummies * (value_to_add * penalty)[:, np.newaxis] result = original_to_insert + add_matrix
代码说明
(value_to_add * penalty)[:, np.newaxis]是将每行对应的叠加值乘以惩罚系数后,转为形状为(行数, 1)的二维数组,触发numpy广播机制,方便和同样行数的哑变量DataFrame做逐元素相乘- 哑变量为0的位置相乘后增量为0,不会修改原数值;哑变量为1的位置会保留对应行的叠加值,相加后得到目标结果
- 最终输出的
result和你给出的desired_df完全一致
内容的提问来源于stack exchange,提问作者Yehoshaphat Schellekens
相关产品推荐
相关产品推荐

