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/

相关文章:

python - Keras:predict_generator 的输出是什么?

python - 如何将一列除以另一列,其中一个数据框的列值对应于 Python Pandas 中另一个数据框的列值?

python - Fhir 史诗沙盒 : Using a JWT to Obtain an Access Token for a Backend Service

python - 将 Pandas 数据框列表转换为 bool 列

python - 用于时间序列数据的 Pandas Melt 函数

python - 将 Pandas 数据框列拆分为多列的最有效方法

python - 避免 SQLAlchemy 中的套接字超时

python - 使用 PyArrow 从多个文件中读取分区的 parquet 数据集,并根据文件名添加分区键

python - 从 2 个 pandas 数据框中过滤元素

python - 如何连接来自两个不同数据框的行的组合?