2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以通過(guò)將 lambda 函數(shù)應(yīng)用于整個(gè)數(shù)據(jù)幀來(lái)應(yīng)用逐行函數(shù),使用axis=1. 這將允許您獲得一個(gè)True/False列'low_seed_wins'。
使用新的 True/False 列,您可以獲取計(jì)數(shù)和總和(計(jì)數(shù)是游戲數(shù),總和是 lower_seed 勝利的數(shù)量)。使用它,您可以將總和除以計(jì)數(shù)以獲得贏率。
這只有效,因?yàn)槟愕牡头N子隊(duì)總是在左邊。如果他們不是,那將會(huì)更復(fù)雜一些。
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

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
您應(yīng)該通過(guò)檢查第一隊(duì)和第二隊(duì)的兩個(gè)條件來(lái)計(jì)算這一點(diǎn)。這將返回一個(gè)布爾值,其總和是它為真的情況數(shù)。然后只需除以整個(gè)數(shù)據(jù)幀的長(zhǎng)度即可得到百分比。沒(méi)有測(cè)試數(shù)據(jù)很難準(zhǔn)確檢查
(
((tourney['Seed'] > tourney['Seed.1']) &
(tourney['Score'] > tourney['Score.1'])) ||
((tourney['Seed.1'] > tourney['Seed']) &
(tourney['Score.1'] > tourney['Score']))
).sum() / len(tourney)
添加回答
舉報(bào)