python - 在键列值相同的任何时候切换两行中的两个值
问题描述
我有 3 场棒球比赛的下表。每场比赛,我有两行代表在同一场比赛中参加比赛的两支球队中的每一支球队的信息。通过检查列 play_homevisitor 来知道哪一行指的是哪支球队,如果它有 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
我还有每个团队的 runs_scored 数。
所以,我需要用runs_allowed计算一个新列,它只是在每两行之间切换runs_scored的值,具有相同的Game_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_homevisitor 列中总是有 0,1,0,1 的序列,所以我想到了一个想法:
- 创建两个中间列,将 runs_scored 移到 -1 和 +1。它将创建 upShift 列和 downShift 列。只分析每一对game_D;在 upShift 中,主队得分将上升,在 downShift 中,客队得分将下降。
df['downShift'] = df['Runs_scored'].shift(periods= 1).fillna(0) df['upShift'] = df['Runs_scored'].shift(periods= -1).fillna(0)
- 那么如果 play_homevisitor 为 0,我将在 upShift 中取值,否则,如果 play_homevisitor 为 1,我将在 downshift 中取值
df['Runs_allowed'] = df[['play_homevisitor','downShift', 'upShift']].apply(lambda x: x['upShift'] if x['play_homevisitor'] == 0 else x['downShift '],轴=1)
解决方案
您可以groupby
结合使用shift
两次。然后使用fillna
创建新列:
s1 = df.groupby('Game_ID')['Runs_scored'].shift(-1)
s2 = df.groupby('Game_ID')['Runs_scored'].shift(1)
df['Runs_allowed'] = s1.fillna(s2).astype(int)
print(df)
Game_ID hometeam visteam play_homevisitor Runs_scored Runs_allowed
0 ATL199204090 ATL SFN 0 13 6
1 ATL199204090 ATL SFN 1 6 13
2 ATL199204100 ATL SFN 0 3 6
3 ATL199204100 ATL SFN 1 6 3
4 ATL199204110 ATL SFN 0 4 0
5 ATL199204110 ATL SFN 1 0 4
推荐阅读
- r - “使用 rnoaa/countyweather 包在 R 中获取纽约市的每小时数据”
- python-3.x - 如何解决python中没有名为“replacers”的模块问题?
- php - 使 CPT 存档可编辑并集成 Thrive Architect
- ubuntu - 如何在 Win 10 中使用 WSL Ubuntu Bash 开发 Go App
- javascript - 如何从文本框中提取选择性数据
- android - 通过刷新(或不刷新)片段来实现动态 ScrollView
- javascript - 如何在 java 脚本中的自定义 HTMLElement 中为锚点附加点击处理程序?
- php - 为什么这两个脚本中只有一个有效?
- javascript - Chrome 扩展 - 文本输入和悬停事件在外部显示器上没有响应
- bash - awk 变量未正确打印连接(第二个字符串覆盖第一个字符串)