Как насчет этого:
df = pd.DataFrame({"Day": [1, 2, 3, 4, 5],
"Player": ["Andy", "Boby", "Andy", "Carl", "Andy"],
"Score": [6, 6, 4, 2, 3],
})
df['last_pass_date'] = None
passed_indices = df["Score"] > 5
df.loc[passed_indices, 'last_pass_date'] = df.loc[passed_indices, 'Day']
df['last_pass_date'] = df.groupby("Player")['last_pass_date'].apply(
lambda group: group.shift().ffill())
print(df)
Производит:
Day Player Score last_pass_date
0 1 Andy 6 NaN
1 2 Boby 6 NaN
2 3 Andy 4 1.0
3 4 Carl 2 NaN
4 5 Andy 3 1.0
Идея состоит в том, чтобы установить last_pass_date на текущую дату, когда игрок проходит, а затем заполнить эту колонку вперед для каждого игрока.,Единственный дополнительный трюк - сдвиг на 1 перед заполнением колонки, сгруппированной по игрокам, вперед (таким образом вы получаете дату прохода, на которую игрок ранее прошел)