Вы можете использовать reshape
в базовых numpy
массивах для эффективного решения.
Шаг 1
Это требует некоторого изменения формы и, наконец, помещения данных в массив empty
numpy.
home = df.iloc[:, [1,3]]
away = df.iloc[:, [0,2]]
total = np.empty((home.shape[0] * 2, home.shape[1]), dtype=object)
total[::2] = away
total[1::2] = home
Шаг 2
Теперь, когда мы отформатировали данные, мы можем использовать expanding.mean
и немного изменить форму
d = pd.DataFrame({'team': total[:, 0], 'score': total[:, 1].astype(float)})
out = d.groupby('team').score.expanding().mean().reset_index().sort_values(by='level_1')
pd.DataFrame(
out[['team', 'score']].values.reshape(-1, 4)[:, [0,2,1,3]],
columns=df.columns
)
Visitor Home Visitor_rtg Home_rtg
0 Sixers Celtics 83.4 100.7
1 Thunder Warriors 97.7 105.6
2 Bucks Hornets 110.2 109.2
3 Pelicans Sixers 88.1 86.3
4 Hornets Wizards 99.65 102.3