亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓滾動窗口從熊貓的未來(后續)窗口中迭代?

如何讓滾動窗口從熊貓的未來(后續)窗口中迭代?

慕后森 2022-11-01 14:45:59
假設我有這樣的df:| 編號| 日期 | 目標行|| 1| 2016-01-01 | 0|| 1| 2016-02-01 | 0|| 1| 2016-03-01| 0|| 1 | 2016-04-01| 0|| 1| 2016-05-01| 1|| 1| 2016-06-01| 0|| 1| 2016-07-01| 0|| 1| 2016-08-01| 0|我的任務是檢查接下來的 4 個target_row值是否為 1 - 包括當前值,因此它應該是 1。( groupby('id') is needed)。所以希望輸出這個:| 編號| 日期 | 目標行|下一個_6_目標| 1| 2016-01-01 | 0| 0| 1| 2016-02-01 | 0| 1| 1| 2016-03-01| 0| 1| 1 | 2016-04-01| 0| 1| 1| 2016-05-01| 1| 1| 1| 2016-06-01| 0| 0| 1| 2016-07-01| 0| 0| 1| 2016-08-01| 0| 0我試過這種方式: df['next_6_target'] = df.groupby('id').rolling(window=6)[['target_row']].max().reset_index(drop=True)然后執行移位 - 但它給出了錯誤的結果在 SQL 解決方案中應該是這樣的:MAX(target_row) OVER (PARTITION BY ID ORDER BY DATE ROWS BETWEEN CURRENT ROW AND 3 FOLLOWING)
查看完整描述

2 回答

?
HUX布斯

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


查看完整回答
反對 回復 2022-11-01
?
達令說

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

      """)


查看完整回答
反對 回復 2022-11-01
  • 2 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號