Учитывая следующий фрейм данных:
df = pd.DataFrame([
['A','B',1,1,5,3],
['C','D',2,1,3,3],
['E','F',1,1,1,1],
['A','D',4,2,2,3],
['B','D',2,2,3,3],
['F','E',1,2,1,1],
['A','D',4,3,2,3],
['B','D',2,3,3,0],
['F','E',1,3,1,1]],
columns=['ownerh_team','visit_team','some_var','week','some_var2','score'])
ownerh_team visit_team some_var week some_var2 score
0 A B 1 1 5 3
1 C D 2 1 3 3
2 E F 1 1 1 1
3 A D 4 2 2 3
4 B D 2 2 3 3
5 F E 1 2 1 1
6 A D 4 3 2 3
7 B D 2 3 3 0
8 F E 1 3 1 1
Я использовал pandas.Dataframe.query для фильтрации фрейма данных и функцию pandas.Dataframe.apply дляповторить это эффективно.Попробуйте этот код:
def new_var_func(data=df, column='name_var', n_past_weeks=1, score_value= 3):
df[column] = df.apply(lambda row: len(df[(df.ownerh_team == row.ownerh_team) &
(df.score == score_value) &
(df.week >= row.week - n_past_weeks) &
(df.week <= row.week)]), axis=1)
return df
df = new_var_func(data=df, column='name_var', n_past_weeks=1, score_value=3)
И дает:
ownerh_team visit_team some_var week some_var2 score name_var
0 A B 1 1 5 3 1
1 C D 2 1 3 3 1
2 E F 1 1 1 1 0
3 A D 4 2 2 3 2
4 B D 2 2 3 3 1
5 F E 1 2 1 1 0
6 A D 4 3 2 3 2
7 B D 2 3 3 0 1
8 F E 1 3 1 1 0
Примечание : я посчитал, что вы также хотите посчитать результаты текущей недели, если вычтобы исключить неделю, в которую вы запускаете игру из подсчета, замените df.week <= row.week
на df.week < row.week
или измените запросы, если я неверно истолковал некоторую часть вашего запроса