2 回答

TA贡献1876条经验 获得超6个赞
很高兴看到您在访问/调用 pandas 数据框时是否遇到问题。
这是基于rolling(win)and的可能解决方案max():
import pandas as pd
d = dict(row = [0,0,0,0,0,0,0,1,0,0,0,0,0,0])
df = pd.DataFrame(d)
win = 6
df['winMax'] = df.rolling(win).max().shift(-win+1)
print(df)
>
row winMax
0 0 0.0
1 0 0.0
2 0 1.0
3 0 1.0
4 0 1.0
5 0 1.0
6 0 1.0
7 1 1.0
8 0 0.0
9 0 NaN
10 0 NaN
11 0 NaN
12 0 NaN
13 0 NaN

TA贡献1821条经验 获得超6个赞
pandasql 可能的解决方案。有没有办法避免使用它?
from pandasql import sqldf
df_final = sqldf("""SELECT id, date, target_row,
MAX(target_row) OVER (PARTITION BY id ORDER BY date ROWS BETWEEN CURRENT ROW AND 6 FOLLOWING)
FROM df
""")
添加回答
举报