所以我有一个看起来像这样的数据框DF: DF:
match_id team teamA_Win Outcome
1 A True None
2 B True None
3 A False None
此df中的结果列中填充了字符串'None'
我想要的是能够根据team和teamA_win中的值将结果字符串的值更改为“ Win”或“ Loss”。
作为一个例子,如果Team == A并且TeamA_win = True为True,那么结果应该是Win。但是,如果Team == A且TeamA_Win = False,则结果为损失。同样,如果Team == B和TeamA_Win = True,那么结果应该是Loss。
我创建了以下函数:
def win(x):
if (x['team']=='A')& (x['teamA_win']==True):
x['outcome']='Win'
elif ((x['team']=='A')& (x['teamA_win']==False)):
x['outcome']='Loss'
elif ((x['team']=='B')& (x['teamA_win']==True)):
x['outcome']='Loss'
elif ((x['team']=='B')& (x['teamA_win']==False)):
x['outcome']='Win'
现在,当我调用win(DF)时,出现错误: 系列的真实值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
关于如何解决此问题的任何想法?还是有一种更简单的方法来解决这种情况?
答案 0 :(得分:0)
您可以使用np.select
,这将使您可以定义条件及其可能的值,如下所示:
import pandas as pd
import numpy as np
def win(x):
conditions = [
(x['team']=='A') & (x['teamA_win']==True),
(x['team']=='A') & (x['teamA_win']==False),
(x['team']=='B') & (x['teamA_win']==True),
(x['team']=='B') & (x['teamA_win']==False)]
choices = ['Win', 'Loss', 'Loss', 'Win']
x['outcome'] = np.select(conditions, choices)
希望有帮助。
答案 1 :(得分:0)
或者使用两层结构,在'Outcome'
列中False
,然后使用loc
检查'team'
列是否等于'teamA_Win'
替换{{1} }和True
一起使用,而'A'
和False
一起使用,则将'B'
列设为'Outcome'
:
True
输出:
df['Outcome']=False
df.loc[df['team']==df['teamA_Win'].map({True:'A',False:'B'}),'Outcome']=True