这是我的数据帧df。
GAME_DATE_EST HOME_TEAM VISITOR_TEAM HOME_TEAM_WINS
2020-12-18 A D 0
2020-12-14 B A 0
2020-12-12 C A 1
2020-09-11 A E 0
我想按年份分组,然后在新的列中运行一个条件语句,检查a队是赢还是输,a赢。例如,如果A是主队,则主队获胜的值为0表示A输了(A获胜队获胜的值为0意味着A获胜( A获胜这是我的代码: 我得到这个错误";ValueError:序列的真值不明确。使用a.empty、a.bool((、a.item((、.any((或.all((; 我已经尝试通过指定df['GAME_DATE_EST'] = pd.to_datetime(df['GAME_DATE_EST'])
def func(row):
if (row['VISITOR_TEAM'] == 'A') & (row['HOME_TEAM_WINS'] == 0):
row['A wins'] = 1
elif (row['HOME_TEAM'] == 'A') & (row['HOME_TEAM_WINS'] == 1):
row['A wins'] = 1
else:
row['A wins'] = 0
df.groupby(df['GAME_DATE_EST'].dt.year).apply(func)
row['HOME_TEAM_WINS'][1]
来解决这个错误,但这会产生一个关键错误。如果有任何帮助,我将不胜感激。
你似乎只需要知道A队是否获胜。我们可以在没有if / else
:的情况下以矢量化的方式来实现这一点
df['A wins'] = (df.HOME_TEAM.eq('A') & df.HOME_TEAM_WINS.eq(1)) |
(df.VISITOR_TEAM.eq('A') & df.HOME_TEAM_WINS.eq(0))
df
# GAME_DATE_EST HOME_TEAM VISITOR_TEAM HOME_TEAM_WINS A wins
#0 2020-12-18 A D 0 False
#1 2020-12-14 B A 0 True
#2 2020-12-12 C A 1 False
#3 2020-09-11 A E 0 False
此外,您似乎对groupby
+apply
有误解。当您在GroupBy对象上apply
时,您会得到一个子数据帧作为应用函数的参数,而不是一行,这就是为什么您会得到ValueError。