如何在KNIME或Python中基于列值构建评分列(含数值与文本列)
基于列值实现评分机制的方案
KNIME 实现步骤
处理数值列(column_1)
- 拖拽Rule Engine节点到工作流,连接数据源节点
- 打开节点配置,在规则编辑框输入:
$column_1$ > 80 => 1 TRUE => 0 - 在输出设置中指定新列名称(例如
score_column1),运行节点生成评分列
处理二元文本列(column_2)
- 同样使用Rule Engine节点,规则设置为:
$column_2$ = "authenticated" => 1 TRUE => 0 - 指定新列名(例如
score_column2)后执行节点
处理多取值文本列(如教育程度)
如果文本值对应明确的评分等级(比如"博士"→3、"硕士"→2、"本科"→1、"专科"→0),有两种方式:
- 方式1:用Rule Engine编写链式规则:
$education$ = "博士" => 3 $education$ = "硕士" => 2 $education$ = "本科" => 1 TRUE => 0 - 方式2:用String to Number节点,在配置界面手动映射文本值到对应评分,直接生成数值评分列
Python 实现方案
借助pandas库可快速完成,示例代码如下:
import pandas as pd import numpy as np # 读取数据(替换为你的数据源路径) df = pd.read_csv("your_data.csv") # 处理column_1:大于80得1,否则0 df["score_column1"] = df["column_1"].apply(lambda x: 1 if x > 80 else 0) # 处理column_2:authenticated得1,否则0 df["score_column2"] = (df["column_2"] == "authenticated").astype(int) # 处理多取值文本列(以教育程度为例) # 方法1:用字典映射 edu_score_map = {"博士": 3, "硕士": 2, "本科": 1, "专科": 0} df["score_education"] = df["education"].map(edu_score_map).fillna(0) # 方法2:用numpy链式判断(适合逻辑更复杂的场景) df["score_education"] = np.where(df["education"] == "博士", 3, np.where(df["education"] == "硕士", 2, np.where(df["education"] == "本科", 1, 0)))
内容的提问来源于stack exchange,提问作者Fahad
相关产品推荐
相关产品推荐

