Вычисления Python во фрейме данныхPython

Программы на Python
Anonymous
Вычисления Python во фрейме данных

Сообщение Anonymous »

У меня есть фрейм данных на Python, содержащий множество столбцов данных о бейсболе. Каждая подача представляет собой еще одну строку, и специально для этой задачи два столбца: «Иннинг»: это иннинг, в котором происходила подача, и «Ауты»: количество аутов на момент подачи. Я пытаюсь создать функцию, которая вычисляет количество подач для питчера, которое рассчитывается следующим образом. Если питчер подает 3 иннинга и выходит из игры в 4-м, в то время как у него были первые 2 аута, то он подаст 3,2 иннинга. если бы они выдали 1 аут, то это было бы 3,1 аута. В кадре данных есть несколько разных игр, поэтому мне нужно сложить все иннинги, поданные в разных играх (например, если в игре 1 было подано 3,1 иннинга, а во второй игре было 4,2 иннинга, это будет 8 подач). Вот какая функция у меня сейчас есть:

Код: Выделить всё

def calc_innings_pitched(pitcher_df):
innings_pitched = 0.0
for date, game_df in pitcher_df.groupby('Date'):
max_inning = game_df['Inning'].max()
last_row = game_df.iloc[-1]
outs = last_row['Outs']
innings = max_inning + (outs / 3.0)
innings_pitched += innings

if innings_pitched % 1 == (1/3):
return int(innings_pitched) + 0.1
elif innings_pitched % 1 == (1/3):
return int(innings_pitched) + 0.2
else:
return innings_pitched
Я попробовал несколько методов самостоятельно и пару ответов, сгенерированных GPT в чате, но ни один из них не смог правильно рассчитать их.
Я не могу опубликовать исходный набор данных, но Pitcher_df будет выглядеть так:



Дата
Иннинг
Ауты



6/6
1
0


6/6
1
1


6/6
1< /td>
2


6/6
2
0


6/6
2
1


6/6
2
2


6/6< /td>
3
0


6 /6
3
1


< td>6/6
3
2


6/6
4
0


6/6
4
1


6/7
1
0


6/7
1
1
< /tr>

6/7
1
2


6/7
2
0


6/7
2
1


6/7
2
< td>1


6/7
2
2



Это должно дать Innings Pitched значение 4,1 для игры на 6/6 и 2,2 для игры на 6/7. В сумме это составит 7 поданных иннингов. Мне не нужно, чтобы отдельные игры были отформатированы как 4.1 и 2.2, а не как 4.333 и 2.666, поскольку мне нужно вернуть только общее количество иннингов.

Подробнее здесь: https://stackoverflow.com/questions/786 ... data-frame

Вернуться в «Python»