为了账号安全,请及时绑定邮箱和手机立即绑定

计算DataFrame中满足多个条件的值的百分比

计算DataFrame中满足多个条件的值的百分比

跃然一笑 2022-01-18 17:09:05
我有一个数据框,其中包含自 1985 年以来每场疯狂三月游戏的信息。现在我正在尝试逐轮计算较高种子的获胜百分比。主 DataFrame 如下所示:我认为最好的方法是创建单独的函数。第一个处理分数高于 score.1 的返回队和 score.1 高于 score 的返回队。1 然后将它们附加到函数末尾。下一个需要你做种子.1高于种子并返回团队然后种子高于种子.1并返回团队.1然后追加和最后一个函数在它们相等时创建一个函数def func1(x):    if tourney.loc[tourney['Score']] > tourney.loc[tourney['Score.1']]:        return tourney.loc[tourney['Team']]    elif tourney.loc[tourney['Score.1']] > tourney.loc[tourney['Score']]:        return tourney.loc[tourney['Team.1']]func1(tourney.loc[tourney['Score']])
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您可以通过将 lambda 函数应用于整个数据帧来应用逐行函数,使用axis=1. 这将允许您获得一个True/False列'low_seed_wins'。


使用新的 True/False 列,您可以获取计数和总和(计数是游戏数,总和是 lower_seed 胜利的数量)。使用它,您可以将总和除以计数以获得赢率。


这只有效,因为你的低种子队总是在左边。如果他们不是,那将会更复杂一些。


import pandas as pd

df = pd.DataFrame([[1987,3,1,74,68,5],[1987,3,2,87,81,6],[1987,4,1,84,81,2],[1987,4,1,75,79,2]], columns=['Year','Round','Seed','Score','Score.1','Seed.1'])


df['low_seed_wins'] = df.apply(lambda row: row['Score'] > row['Score.1'], axis=1)


df = df.groupby(['Year','Round'])['low_seed_wins'].agg(['count','sum']).reset_index()


df['ratio'] = df['sum'] / df['count']


df.head()



Year    Round   count   sum     ratio

0   1987    3   2       2.0     1.0

1   1987    4   2       1.0     0.5


查看完整回答
反对 回复 2022-01-18
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您应该通过检查第一队和第二队的两个条件来计算这一点。这将返回一个布尔值,其总和是它为真的情况数。然后只需除以整个数据帧的长度即可得到百分比。没有测试数据很难准确检查


(

    ((tourney['Seed'] > tourney['Seed.1']) & 

     (tourney['Score'] > tourney['Score.1'])) || 

    ((tourney['Seed.1'] > tourney['Seed']) & 

     (tourney['Score.1'] > tourney['Score']))

).sum() / len(tourney)


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 371 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号