python对于数据表按照变量得分表进行映射,并汇总
在做评分卡时,需要进行得分映射,但是得分区间是一个比较特殊的形式,查了查叫Interval,直接是一个区间,想了挺久的,用一个极其笨蛋的方式,写了一个得分映射函数,记录一下。
首先生成示例数据
描述不太精准,先生成示例数据,这样看起来清晰一些
下面生成的是甲和乙两个特征的数值
data1 = {
"甲":[3,18,7,19],
"乙":[13,15,21,23]
}
df1 = pd.DataFrame(data1)
df1
得分映射表
data2 = {
"名称":['甲','甲','乙','乙'],
"区间":[pd.Interval(1, 15, closed='right'),pd.Interval(15, 20, closed='right'),pd.Interval(10, 20, closed='right'),pd.Interval(20, 25, closed='right')],
"分数":[3,5,7,9]
}
df2 = pd.DataFrame(data2)
df2
映射函数
def MapScore(df1,df2,name,Interval_name,s):
'''
df1:原数据
df2:得分映射表
name:'特征名称'
Interval_name:'区间名称'
s:'分数'
'''
name = df2[name]
Interval = Interval_name
s = s
all_score = []
for i in df1.index:
score_all = 0
for j in list(set(name)):
qz = list(df2[name == j][Interval])
for k in range(len(qz)):
score = 0
if df1[j][i] in qz[k]:
score_list = list(df2[name==j][s])
score += score_list[k]
score_all += score
all_score.append(score_all)
df1['总分'] = all_score
return df1
MapScore(df1,df2,'名称','区间','分数')
效果
知识有限,写的比较笨蛋,有待优化。