假设我有一些团队数据作为数据框 df
.
home_team home_score away_team away_score
A 3 C 1
B 1 A 0
C 3 B 2
我想要一个数据框来指示一支球队击败另一支球队的次数。例如 [1,3]
中的条目是第 1 队击败第 3 队的次数,但 [3,1]
中的数字是第 3 队击败第 1 队的次数。
这听起来像 df.pivot
应该能够做到,但我似乎无法让它做我想做的事。
如何使用 pandas 完成此任务?
这是所需的输出
A B C
A 0 0 1
B 1 0 0
C 0 1 0
最佳答案
这将创建一个仅包含赢家和输家的新数据框。它可以用来创建您正在寻找的东西。
我制作了一些额外的数据来填充一些数据透视表值
import pandas as pd
data = {'home_team':['A','B','C','A','B','C','A','B','C'],
'home_score':[3,1,3,0,1,2,0,4,0],
'away_team':['C','A','B','B','C','B','C','A','A'],
'away_score':[1,0,2,2,0,3,1,7,1]}
df = pd.DataFrame(d)
# create new dataframe
WL = pd.DataFrame()
WL['winner'] = pd.concat([df.home_team[df.home_score>df.away_score],
df.away_team[df.home_score<df.away_score]], axis=0)
WL['loser'] = pd.concat([df.home_team[df.home_score<df.away_score],
df.away_team[df.home_score>df.away_score]], axis=0)
WL['game'] = 1
# groupby to count the number of win/lose pairs
WL_gb = WL.groupby(['winner','loser']).count().reset_index()
# pivot the data
WL_piv = WL_gb.pivot(index='winner', columns='loser', values='game')
关于python - 如何使用 `pivot` 来跟踪输赢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539783/