我有一个类似的df
,其中home_dummy
0是“ Away”的二进制文件,而1是“ home”的二进制文件。
如果球队的得分为1(G),则为1(主场)。
如果团队在0得分0'G',那么在0得分'0'。
我展示了一个示例,但还有许多其他匹配项。
team opponent home_dummy G
0 Athlético-PR Flamengo 0 1
...
20 Athlético-PR Flamengo 1 0
...
190 Flamengo Athlético-PR 0 3
...
121 Flamengo Athlético-PR 1 2
我如何最终得到一个仅在两行中表示比赛结果(进球数与进球数)的表,如下所示:
team opponent HomeG AwayG
...
0 Flamengo Athlético-PR 2 1
1 Athlético-PR Flamengo 0 3
注意:
在常规比赛中,各队面对面两次,每场一次主场比赛,一次客场比赛。
答案 0 :(得分:1)
这是一种方法。首先,将原始数据转换为数据帧:
from io import StringIO
import pandas as pd
data = ''' team opponent home_dummy G
0 Athlético-PR Flamengo 0 1
20 Athlético-PR Flamengo 1 0
190 Flamengo Athlético-PR 0 3
121 Flamengo Athlético-PR 1 2
'''
df = pd.read_csv(StringIO(data), sep='\s\s+', engine='python')
现在创建家庭和外出数据框,然后将它们加入:
t_home = (df.loc[ df['home_dummy'] == 1, ['team', 'opponent', 'G']]
.rename(columns={'G': 'HomeG'})
.copy())
# reverse team and opponent
t_away = (df.loc[ df['home_dummy'] == 0, ['team', 'opponent', 'G']]
.rename(columns={'G': 'AwayG', 'team': 'opponent', 'opponent': 'team'})
.copy())
result = (pd.merge(t_home, t_away, how='inner',
left_on=['team', 'opponent'], right_on=['team', 'opponent']))
print(result)
team opponent HomeG AwayG
0 Athlético-PR Flamengo 0 3
1 Flamengo Athlético-PR 2 1
排序顺序与预期答案不同;不确定是否相关。