构建Pandas函数:通过三列二元分类结果生成预测列
实现Pandas数据框的串行二元分类生成预测列
针对你需要的这个串行判断逻辑,我推荐两种高效的实现方式,分别适配不同的数据规模场景:
方法一:向量化操作(推荐大数据集)
使用numpy.select()来实现,这是向量化操作,比逐行遍历快得多,非常适合处理大型数据框:
import pandas as pd import numpy as np # 先构造一个示例数据框(你可以替换成自己的真实数据) sample_data = { 'Versicolor': ['1', '0', '0', '1', '0', '0'], 'Virginica': ['0', '1', '0', '0', '1', '0'] } df = pd.DataFrame(sample_data) # 定义判断条件和对应的预测值 conditions = [ # 第一个判断:Versicolor为'1'时返回versicolor df['Versicolor'] == '1', # 第二个判断:Versicolor为'0'且Virginica为'1'时返回virginica (df['Versicolor'] == '0') & (df['Virginica'] == '1') ] prediction_values = ['versicolor', 'virginica'] # 生成Predictions列,所有不满足上述条件的情况默认返回setosa df['Predictions'] = np.select(conditions, prediction_values, default='setosa')
注意事项
如果你的Versicolor和Virginica列存储的是数值型的0/1(不是字符串),记得把条件里的'1'和'0'改成1和0,比如df['Versicolor'] == 1。
方法二:逐行遍历(适合小数据集)
如果你的数据规模不大,用df.apply()写一个自定义函数会更直观,逻辑一目了然:
import pandas as pd # 自定义判断函数 def generate_prediction(row): if row['Versicolor'] == '1': return 'versicolor' elif row['Virginica'] == '1': return 'virginica' else: return 'setosa' # 生成Predictions列 df['Predictions'] = df.apply(generate_prediction, axis=1)
这个方法的优点是逻辑清晰,容易修改,但因为是逐行处理,数据量很大时效率会比向量化操作低不少。
内容的提问来源于stack exchange,提问作者neighbornate
相关产品推荐
相关产品推荐

