python - 如何使用 `pivot` 来跟踪输赢?

标签 python pandas

假设我有一些团队数据作为数据框 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')

enter image description here

关于python - 如何使用 `pivot` 来跟踪输赢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539783/

相关文章:

pandas - 在另一列上乘以两个数据框条件

python - 按索引删除多个 Pandas 列

python - 是否可以在 Apache Beam 或 google Cloud Dataflow 中运行自定义 Python 脚本

python - python中的Chrome扩展?

python - Python 中的函数和可变列表

python - 将数据框转出到单行,其中列标有前缀

python - 将两列 Pandas 数据框合并为一个字符串

python - NamedTuple 到 Dataframe

python - 如何将数字替换为空间参数

python - 如何在 GAE(python)中解码 encodeURIComponent?