我有三场棒球赛的下表。在每一个游戏中,我有两行代表在同一个游戏中的两个团队中每一个的信息。通过检查play\u homepositor列知道哪一行是指哪个团队的方法,如果该列有1,则该行是关于主队的(位于hometeam列中),但是如果是0,则该行是关于访客团队的(位于visteam列中)。这是我的数据集df
Game_ID hometeam visteam play_homevisitor Runs_scored
ATL199204090 ATL SFN 0 13
ATL199204090 ATL SFN 1 6
ATL199204100 ATL SFN 0 3
ATL199204100 ATL SFN 1 6
ATL199204110 ATL SFN 0 4
ATL199204110 ATL SFN 1 0
我也有每个队的得分
因此,我需要计算一个新的列,其中允许运行,它只是在具有相同游戏ID的每两行之间切换运行的值,如下所示:
Game_ID hometeam visteam play_homevisitor Runs_scored Runs_allowed
ATL199204090 ATL SFN 0 13 6
ATL199204090 ATL SFN 1 6 13
ATL199204100 ATL SFN 0 3 6
ATL199204100 ATL SFN 1 6 3
ATL199204110 ATL SFN 0 4 0
ATL199204110 ATL SFN 1 0 4
我有一个可能的方法,但我很好奇,如果你有一个不同的方法来做它
我一直在想任何可能的方法,我注意到在play\u homevisitor专栏中我总是有0,1,0,1的顺序,所以我想到了一个主意:
df['downShift'] = df['Runs_scored'].shift(periods= 1).fillna(0) df['upShift'] = df['Runs_scored'].shift(periods= -1).fillna(0)
df['Runs_allowed'] = df[['play_homevisitor','downShift', 'upShift']].apply(lambda x: x['upShift'] if x['play_homevisitor'] == 0 else x['downShift'], axis=1)
我一直在想任何可能的方法,我注意到在play\u homevisitor专栏中我总是有0,1,0,1的顺序,所以我想到了一个主意:
可以将
groupby
与shift
结合使用两次。然后使用fillna
创建新列:如果所有对和列都已排序,请使用:
相关问题 更多 >
编程相关推荐