如何在数据框中创建加权特征?
How do I create a weighted feature in a dataframe?
我有一个数据框,它根据存储在列值中的其他分数创建最终分数。除了这些其他计分列外,还有一列显示玩家活跃的月数。
这些列是从 1 到 100 的整数,然后用于创建新功能 FS(最终得分)。这个特征是这些列值的总和,但是列值也被加权了。比如说,第 1 列乘以 0.15,因此它占结果特征的 15%。
我想弄清楚的是,假设其中一名玩家没有玩很长时间(由月份的专栏表示)。在这种情况下,我希望 S1 对他们的最终分数的计数更少。如果 'months' < 6.
,S1 占他们分数的 10% 而不是 15%
如何使这些分级权重灵活地适应这种情况?
代码:
scaler=MinMaxScaler(feature_range=(0, 100))
df_final['S1']=scaler.fit_transform(df_final[['S1']])
df_final['S2']=scaler.fit_transform(df_final[['S2']])
df_final['S3']=scaler.fit_transform(df_final[['S3']])
df_final['S4']=scaler.fit_transform(df_final[['S4']])
s1 = df_final['S1']
s2 = df_final['S2']
s3 = df_final['S3']
s4 = df_final['S4']
df_final['FS'] = (s1 * .15) + (s2 * .15) + (s3 * .50) + (s4 * .20)
结果 df:
S1 S2 S3 S4 Months FS
0 49 66 44 9 4 50
1 36 66 44 10 11 49
2 28 77 33 17 17 52
3 39 66 44 4 2 48
4 32 44 44 17 4 35
尝试分配权重 np.where
:
feature_df = df.iloc[:,:4]
weights = np.where(df.Months.lt(6).to_numpy()[...,None], (.1,.2,.3,.4), (.15,.15,.50, .20))
df['FS'] = feature_df.mul(weights).sum(1)
输出:
S1 S2 S3 S4 Months FS
0 49 66 44 9 4 34.90
1 36 66 44 10 11 39.30
2 28 77 33 17 17 35.65
3 39 66 44 4 2 31.90
4 32 44 44 17 4 32.00
使用连续的所有条件逻辑创建评分函数:
def score(row):
if ....
row['S1'] * ??
return result
这将允许您添加任意复杂性来处理您的评分组合的细微差别
然后将其映射到您的 df
df['FS'] = df.apply(score, axis=1)
我有一个数据框,它根据存储在列值中的其他分数创建最终分数。除了这些其他计分列外,还有一列显示玩家活跃的月数。
这些列是从 1 到 100 的整数,然后用于创建新功能 FS(最终得分)。这个特征是这些列值的总和,但是列值也被加权了。比如说,第 1 列乘以 0.15,因此它占结果特征的 15%。
我想弄清楚的是,假设其中一名玩家没有玩很长时间(由月份的专栏表示)。在这种情况下,我希望 S1 对他们的最终分数的计数更少。如果 'months' < 6.
,S1 占他们分数的 10% 而不是 15%如何使这些分级权重灵活地适应这种情况?
代码:
scaler=MinMaxScaler(feature_range=(0, 100))
df_final['S1']=scaler.fit_transform(df_final[['S1']])
df_final['S2']=scaler.fit_transform(df_final[['S2']])
df_final['S3']=scaler.fit_transform(df_final[['S3']])
df_final['S4']=scaler.fit_transform(df_final[['S4']])
s1 = df_final['S1']
s2 = df_final['S2']
s3 = df_final['S3']
s4 = df_final['S4']
df_final['FS'] = (s1 * .15) + (s2 * .15) + (s3 * .50) + (s4 * .20)
结果 df:
S1 S2 S3 S4 Months FS
0 49 66 44 9 4 50
1 36 66 44 10 11 49
2 28 77 33 17 17 52
3 39 66 44 4 2 48
4 32 44 44 17 4 35
尝试分配权重 np.where
:
feature_df = df.iloc[:,:4]
weights = np.where(df.Months.lt(6).to_numpy()[...,None], (.1,.2,.3,.4), (.15,.15,.50, .20))
df['FS'] = feature_df.mul(weights).sum(1)
输出:
S1 S2 S3 S4 Months FS
0 49 66 44 9 4 34.90
1 36 66 44 10 11 39.30
2 28 77 33 17 17 35.65
3 39 66 44 4 2 31.90
4 32 44 44 17 4 32.00
使用连续的所有条件逻辑创建评分函数:
def score(row):
if ....
row['S1'] * ??
return result
这将允许您添加任意复杂性来处理您的评分组合的细微差别
然后将其映射到您的 df
df['FS'] = df.apply(score, axis=1)