【问题标题】:Python: One hot encoding using reference listPython:使用参考列表的一种热编码
【发布时间】:2021-04-18 11:34:34
【问题描述】:

我有如下数据:

CANDIDATE_ID Job1_Skill1
12 conflict management
13 asset management

我想根据参考技能集(列表)为表 python 和 pandas 中的每个技能添加一个热编码列。 例如,如果给定的参考技能是 [冲突管理、资产管理、.net] 那么我的输出应该如下所示:

CANDIDATE_ID Job1_Skill1 FP_conflict management FP_ asset management FP_.net
12 conflict management 1 0 0
13 asset management 0 1 0

我可以逐行比较,但这似乎不是一种有效的方法。任何人都可以建议使用 python 执行此操作的有效方法吗?

get_dummies 方法根据同一列中的值提供输出,但我需要比较特定参考列表的值以进行编码,即 get_dummies 只能为 FP_Conflict_management 和 FP_asset_management 提供编码,而不能为 FP_.net 对于每个数据帧,get_dummies 也是动态的。我需要根据每个数据帧的特定技能列表进行编码 但我需要比较不同列的值进行编码,因此无法使用。

【问题讨论】:

标签: python python-3.7


【解决方案1】:

这是通过将引用列表添加到源数据数据框的简单解决方法。

# set up source data
df_data = pd.DataFrame([[12,'conflict'],[13,'asset']],columns=['CANDIDATE_ID','Job1_Skill1'])

# define reference list with some unique ids
skills = [[999, 'conflict'],[999, 'asset'],[999, '.net']]
df_skills = pd.DataFrame(skills,columns=['CANDIDATE_ID','Job1_Skill1'])

# add reference data to main df
df_data_with_skills = df_data.append(df_skills, ignore_index=True) 

# encode with pd.get_dummies
skills_dummies = pd.get_dummies(df_data_with_skills.Job1_Skill1)
result = pd.concat([df_data_with_skills, skills_dummies], axis=1)

# remove reference rows
result.drop(result[result['CANDIDATE_ID'] == 999].index, inplace = True) 
print(result)

【讨论】:

  • 如果有多个列怎么办。我仍然希望每个技能只有一个热编码列。像 df_data = pd.DataFrame([[12,'conflict','.net'],[13,'asset','python']],columns=['CANDIDATE_ID','Job1_Skill1','job1_skill2'])我仍然想要与您的输出相同的结构。
  • 仅.net for Candidate_i=12 应该是 1 而不是零。
猜你喜欢
  • 2018-12-17
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2016-11-30
  • 2020-12-22
  • 2018-03-19
相关资源
最近更新 更多