无需循环如何通过pandas Series索引列表为DataFrame新增列?
实现方法
你可以直接用pandas内置的map()方法完成匹配,全程不需要手动写循环,代码如下:
import pandas as pd # 先定义你的类别名称列表 class_names = ['Black Sea Sprat', 'Gilt-Head Bream', 'Hourse Mackerel', 'Red Mullet', 'Red Sea Bream', 'Sea Bass', 'Shrimp', 'Striped Red Mullet', 'Trout'] # 新增实际类别名称列:因为原始类别编号是1~8,列表索引从0开始,所以先减1再匹配 Result['Actual Class Name'] = (Result['Actual Classes'] - 1).map(class_names.__getitem__) # 新增预测类别名称列 Result['Predicted Class Name'] = (Result['Predicted Classes'] - 1).map(class_names.__getitem__)
可选简化写法
如果你已经导入numpy,也可以用矢量化索引的方式实现,逻辑完全一致:
import numpy as np Result['Actual Class Name'] = np.array(class_names)[Result['Actual Classes'] - 1] Result['Predicted Class Name'] = np.array(class_names)[Result['Predicted Classes'] - 1]
逻辑说明
- 原始类别列取值为1~8,而Python列表的下标从0开始,所以先对列值做减1处理得到合法的列表索引
- 两种实现都是pandas/numpy的内置矢量化操作,运行效率远高于手动写Python层级的循环
内容的提问来源于stack exchange,提问作者Aryan Sinha
相关产品推荐
相关产品推荐

