gpt4 book ai didi

python - 在 python 中操作数据帧以进行 Glicko 计算

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:40 25 4
gpt4 key购买 nike

我正在尝试在已加载到 python 中的数据帧上运行 Glicko v2 计算。由于每场比赛都是独立的,我只能比较参加过同一场比赛的运动员。

import pandas as pd

import numpy as np

df = pd.read_excel("MyDirectory/sample.xlsx")

Athlete Race_Id  Rank  Ranking       RD
A Race1 1 1500 0.0000
B Race1 2 1350 27.3220
C Race1 3 1700 11.2342
D Race2 1 1480 80.8880
E Race2 2 1500 0.8923
F Race2 3 1325 8.0090

我想要的输出看起来像这样。

Athlete1 Race_Id Ranking  RD Athlete2 Ranking 2 RD2
A Race1 1500 0.0000 B 1350 27.3220
A Race1 1500 0.0000 C 1700 11.2342
B Race1 1350 27.3220 C 1700 11.2342
D Race2 1480 80.8880 E 1500 0.8923
D Race2 1480 80.8880 F 1700 11.2342
E Race2 1500 0.8923 F 1700 11.2342

我在这背后的想法是,如果我操纵数据框使其看起来像上面的那样,我可以轻松地用我想要的计算定义函数并将它们应用于所述数据框。

为了获得我想要的数据框。我想我会引用每场比赛的最后一行并创建一个 for 循环来匹配数据帧的元素。

data_lr= df.groupby(['Race_Id']).tail(1)

Athlete Race_Id Rank Ranking RD
C Race1 3 1700 11.2342
F Race2 3 1325 8.0090

我挣扎的地方是创建创建新数据框所需的 for 循环吗?任何指导将不胜感激,或者完成我的目标的不同方法也将是有益的。谢谢,

最佳答案

我们可以使用笛卡尔自连接和过滤来创建结果数据框:

(df.merge(df, on='Race_Id',suffixes=('1','2'))
.query('Rank1 != Rank2 and Athlete1 < Athlete2')
[['Athlete1','Race_Id','Ranking1','RD1','Athelete2','Ranking2','RD2']])

动态后缀更新

(df.merge(df, on='Race_Id',suffixes=df.Race_Id.str.extract('Race(\d+)')[0].unique())
.query('Rank1 != Rank2 and Athlete1 < Athlete2')
[['Athlete1','Race_Id','Ranking1','RD1','Athlete2','Ranking2','RD2']])

输出:

   Athlete1 Race_Id  Ranking1      RD1 Athlete2  Ranking2      RD2
1 A Race1 1500 0.0000 B 1350 27.3220
2 A Race1 1500 0.0000 C 1700 11.2342
5 B Race1 1350 27.3220 C 1700 11.2342
10 D Race2 1480 80.8880 E 1500 0.8923
11 D Race2 1480 80.8880 F 1325 8.0090
14 E Race2 1500 0.8923 F 1325 8.0090

关于python - 在 python 中操作数据帧以进行 Glicko 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50706936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com