如何对pandas DataFrame多列同值域数据执行一致的factorize编码
实现步骤
- 先合并
Team1、Team2两列的所有球队名称,按出现顺序去重生成全局统一的编码映射,保证同一个队名对应唯一编码,不会遗漏只在单列出现的球队。 - 用生成的全局映射对两列同时做值替换即可。
完整代码
import pandas as pd # 原始数据 ar = [ ["browns", "patriots", 2, 5], ["patriots", "bills", 4, 15], ["browns", "bills", 1, 10], ["eagles", "browns", 3, 11] ] frame = pd.DataFrame(ar, columns=['Team1', 'Team2', 'Down', 'ToGo']) # 生成全局球队编码映射 all_teams = pd.concat([frame['Team1'], frame['Team2']]) team_map = {team: idx for idx, team in enumerate(all_teams.unique())} # 对两列应用编码 frame[['Team1', 'Team2']] = frame[['Team1', 'Team2']].replace(team_map) # 输出仅保留编码后的两列结果 result = frame[['Team1', 'Team2']] print(result)
输出结果
Team1 Team2 0 0 1 1 1 3 2 0 3 3 2 0
说明
如果需要自定义编码顺序,只需要调整生成球队唯一值列表的顺序即可,不需要修改后续替换逻辑。
内容的提问来源于stack exchange,提问作者C Dorman
相关产品推荐
相关产品推荐

