Вы можете применить построчную функцию, применив лямбда-функцию ко всему фрейму данных с помощью axis=1
.Это позволит вам получить True/False
столбец 'low_seed_wins'
.
С новым столбцом True / False вы можете взять счет и сумму (count - количество игр, а sum - количество побед 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