Pandas Groupby:函数定义中的条件语句



这是我的数据帧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获胜这是我的代码:

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)  

我得到这个错误";ValueError:序列的真值不明确。使用a.empty、a.bool((、a.item((、.any((或.all((;

我已经尝试通过指定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

最新更新