Я полагаю, вам нужно - первая предварительная обработка для добавления _
к именам столбцов:
d = {'Local':'Team_Local','Visitor':'Team_Visitor',
'GoalLocal':'Goal_Local','goalVisitor':'Goal_Visitor'}
df = df.rename(columns=d)
print (df)
Seasson Match Team_Local Team_Visitor Goal_Local Goal_Visitor
0 1 1 Manchester Blackburn 2 1
1 1 1 Leeds Arsenal 2 4
2 1 2 Blackburn Leeds 1 3
3 1 2 Arsenal Manchester 2 0
4 1 3 Leeds Manchester 6 1
5 1 3 Arsenal Blackburn 5 0
6 2 1 Manchester Blackburn 3 1
7 2 1 Leeds Arsenal 2 0
8 2 2 Blackburn Leeds 2 4
9 2 2 Arsenal Manchester 1 3
10 2 3 Leeds Manchester 2 0
11 2 3 Arsenal Blackburn 6 1
Создайте MultiIndex
на split
, затем измените форму на stack
и создайте новый столбец на groupby=+cumsum
, последнее изменение на unstack
:
df = df.set_index(['Seasson','Match'], append=True)
df.columns = df.columns.str.split('_', expand=True)
df = df.stack()
#pandas 0.24+
df['Cum'] = df.groupby(['Seasson','Team'])['Goal'].cumsum()
#pandas lower
#df['Cum'] = df.reset_index().groupby(['Seasson','Team'])['Goal'].cumsum().values
df = df.unstack().reindex(['Team','Goal','Cum'], axis=1, level=0)
df.columns = df.columns.map('_'.join)
df = df.reset_index(level=0, drop=True).reset_index()
print (df)
Seasson Match Team_Local Team_Visitor Goal_Local Goal_Visitor \
0 1 1 Manchester Blackburn 2 1
1 1 1 Leeds Arsenal 2 4
2 1 2 Blackburn Leeds 1 3
3 1 2 Arsenal Manchester 2 0
4 1 3 Leeds Manchester 6 1
5 1 3 Arsenal Blackburn 5 0
6 2 1 Manchester Blackburn 3 1
7 2 1 Leeds Arsenal 2 0
8 2 2 Blackburn Leeds 2 4
9 2 2 Arsenal Manchester 1 3
10 2 3 Leeds Manchester 2 0
11 2 3 Arsenal Blackburn 6 1
Cum_Local Cum_Visitor
0 2 1
1 2 4
2 2 5
3 6 2
4 11 3
5 11 2
6 3 1
7 2 0
8 3 6
9 1 6
10 8 6
11 7 4