Python 如何将一组概率转换为0和1?
我给出了一个包含两列“y”和“proba”的数据集y'有两个类标签“0”和“1”,而“proba”是概率 我必须创建一个列表'y_hat',如果我的'proba'小于0.5,那么我将附加0或1。我已经编写了代码:Python 如何将一组概率转换为0和1?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我给出了一个包含两列“y”和“proba”的数据集y'有两个类标签“0”和“1”,而“proba”是概率 我必须创建一个列表'y_hat',如果我的'proba'小于0.5,那么我将附加0或1。我已经编写了代码: y_hat = [0 if (df_5a['proba']<0.5) else 1] y_hat=list(map(λx:0,如果x为1,(df_5a['proba'])您可以使用: (df['proba'] >= .5).astype(int) 假设您的数据集如下所示
y_hat = [0 if (df_5a['proba']<0.5) else 1]
y_hat=list(map(λx:0,如果x为1,(df_5a['proba'])您可以使用:
(df['proba'] >= .5).astype(int)
假设您的数据集如下所示:
data= {'y':[0,0,1,0,1,0],
'proba': [0.2,0.3,0.25,0.8,0.9,0.15]}
df_5a= pd.DataFrame(data)
df_5a
输出:
y proba
0 0 0.20
1 0 0.30
2 1 0.25
3 0 0.80
4 1 0.90
5 0 0.15
[0]
[0, 0, 0, 1, 1, 0]
您的代码不起作用,因为正如错误所表明的,它在您具体检查的内容方面是不明确的
例如,如果您只想将条件应用于第1行(['proba'][0]
),则通过添加其索引,您的代码可以正常工作:
y_hat = [0 if (df_5a['proba'][0] <0.5) else 1]
y_hat
因此,尽管我发现@Gopal Gautam的答案是正确的,但下面是我对另一种方法的建议,使用该方法可以迭代每一行:
y_hat=[]
for row in df_5a.itertuples(index=True, name='Pandas'):
if row.proba < 0.5:
y_hat.append(0)
else:
y_hat.append(1)
print(y_hat)
您好,欢迎使用SO!虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请阅读,我认为这里是最佳解决方案。
y_hat=[]
for row in df_5a.itertuples(index=True, name='Pandas'):
if row.proba < 0.5:
y_hat.append(0)
else:
y_hat.append(1)
print(y_hat)
[0, 0, 0, 1, 1, 0]