"Pandas数据框架:如何获取列的均值,但仅考虑低于所需获取均值的行"

2024-05-19 20:12:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是我想预测一支球队对另一支球队的胜利,我想在比赛开始前预测每场比赛的胜率

但是,使用df.groupBy("teamName").agg({"isVictory":"mean"})为我提供了团队的全局wirate,这是不可用的,因为此时不应该知道所有匹配的winrate

所以我想要的是,在这个匹配之前获得匹配的winrate,知道我的DataFrame中有一列index,它保持了匹配的顺序(即,如果匹配的索引低于当前匹配的索引,则意味着之前已经进行了匹配,因此应该在平均值中考虑此匹配)

请注意,我的列是:

indexMatch, nameTeam, isVictoryTeam

(isVictoryTeam=如果团队1获胜,如果团队失败,则为0)

数据集示例:

   IndexMatch  isVictoryTeam team   winrate
0           1              1    a       NaN
1           2              0    a         1
2           3              1    a       0.5
3           4              1    a    0.6667

winrate是预期的输出。
事先谢谢你的帮助


Tags: dataframedfindex团队mean全局agggroupby
1条回答
网友
1楼 · 发布于 2024-05-19 20:12:03

一定有更好的方法,但这一种有效:

df = pd.DataFrame({'team': [' a', ' a', ' a', ' a', 'b', 'b', 'c'],
                   'IndexMatch': [1, 2, 3, 4, 5, 6, 7],
                   'isVictoryTeam': [1, 0, 1, 1, 0, 1, 1]})
df['winrate'] = df.groupby('team')['isVictoryTeam'].expanding().mean().reset_index().groupby('team')['isVictoryTeam'].shift().reset_index(drop=True)
df
#   IndexMatch  isVictoryTeam team   winrate
#0           1              1    a       NaN
#1           2              0    a  1.000000
#2           3              1    a  0.500000
#3           4              1    a  0.666667
#4           5              0    b       NaN
#5           6              1    b  0.000000
#6           7              1    c       NaN

相关问题 更多 >