Pandas - 头对头得分计算

3
我有一个网球数据框,想从中获取一些统计数据。我想看到球员之间的头对头比分,无论他们是第一还是第二球员,以及在每种场地上相同的比分。需要使用shift(1)来检查比赛开始前的比分。
以下是我目前拥有的内容:
p1_name p2_name Surface p1_win p2_win
Murray Nadal Hard 1 0
Nadal Murray Clay 1 0
Nadal Murray Hard 0 1
Murray Federer Clay 1 0
下面是我想要的结果,可能会有p1/2 h2h Surface状态:
p1_name p2_name Surface p1_win p2_win p1_h2h p2_h2h
Murray Nadal Hard 1 0 na na
Nadal Murray Clay 1 0 0% 100%
Nadal Murray Hard 0 1 50% 50%
Murray Federer Clay 1 0 na na
如有需要,请联系我。

你能否添加自己的尝试并简单解释一下“头对头比分”是什么意思? - Umar.H
我还没有尝试过,但是“头对头”指的是与另一个玩家对战的总胜率。 - user19446980
从我的角度来看,如果您创建了第二个数据框,并交换了p1/p2字段并将其连接起来,现在您可以按名称和表面分组,并总结获胜列。您可以直接读取它。 - Tim Roberts
你的汇总数据不太准确。在硬地上,穆雷对纳达尔的胜率是100%。 - Tim Roberts
嗨,Tim,那个h2h统计是针对所有表面的。如果可能的话,我想要一个针对所有表面的统计和一个特定表面的统计。在第三场比赛开始之前,穆雷对纳达尔的总比分是1-1,因此胜率为50%/50%。 - user19446980
1个回答

2
我认为这可以是你的一个良好起点。
import pandas as pd

data = [
    [ 'Murray', 'Nadal', 'Hard', 1, 0 ],
    [ 'Nadal', 'Murray', 'Clay', 1, 0 ],
    [ 'Nadal', 'Murray', 'Hard', 0, 1 ],
    [ 'Murray', 'Federer', 'Clay', 1, 0 ]
]

df = pd.DataFrame( data, columns=['p1_name', 'p2_name', 'Surface', 'p1_win', 'p2_win'] )
print(df)
df1 = df.rename(columns={'p1_name':'p2_name','p2_name':'p1_name','p1_win':'p2_win','p2_win':'p1_win'})
print(df1)
df2 = pd.concat( [df, df1] )
print(df2)
df3 = df2.groupby(['p1_name','p2_name','Surface']).sum()
print(df3)
df3['p1_pct'] = df3['p1_win'] / (df3['p1_win']+df3['p2_win'])
df3['p2_pct'] = df3['p2_win'] / (df3['p1_win']+df3['p2_win'])
print(df3)

输出:

  p1_name  p2_name Surface  p1_win  p2_win
0  Murray    Nadal    Hard       1       0
1   Nadal   Murray    Clay       1       0
2   Nadal   Murray    Hard       0       1
3  Murray  Federer    Clay       1       0
  p2_name  p1_name Surface  p2_win  p1_win
0  Murray    Nadal    Hard       1       0
1   Nadal   Murray    Clay       1       0
2   Nadal   Murray    Hard       0       1
3  Murray  Federer    Clay       1       0
   p1_name  p2_name Surface  p1_win  p2_win
0   Murray    Nadal    Hard       1       0
1    Nadal   Murray    Clay       1       0
2    Nadal   Murray    Hard       0       1
3   Murray  Federer    Clay       1       0
0    Nadal   Murray    Hard       0       1
1   Murray    Nadal    Clay       0       1
2   Murray    Nadal    Hard       1       0
3  Federer   Murray    Clay       0       1
                         p1_win  p2_win
p1_name p2_name Surface                
Federer Murray  Clay          0       1
Murray  Federer Clay          1       0
        Nadal   Clay          0       1
                Hard          2       0
Nadal   Murray  Clay          1       0
                Hard          0       2
                         p1_win  p2_win  p1_pct  p2_pct
p1_name p2_name Surface
Federer Murray  Clay          0       1     0.0     1.0
Murray  Federer Clay          1       0     1.0     0.0
        Nadal   Clay          0       1     0.0     1.0
                Hard          2       0     1.0     0.0
Nadal   Murray  Clay          1       0     1.0     0.0
                Hard          0       2     0.0     1.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接