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

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

Python pandas - 按缺少日期的組在滾動窗口上有效地應用函數

Python pandas - 按缺少日期的組在滾動窗口上有效地應用函數

青春有我 2022-09-06 16:41:27
注意:我已經知道這個問題的答案,我發布它只是因為我在堆棧溢出上找不到正確的答案,我花了驚人的時間來弄清楚它。話雖如此,請隨時建議其他選項。問題我有一個帶有三列的pandas DataFrame,一個跟蹤日期,一個跟蹤相關觀察結果(即我的分組列),第三個變量存儲一些數值。對于我的數據幀中的每個組,我想計算日期列上的滾動總和。警告:數據幀中缺少一些日期,我想將它們視為值為0的觀測值。我不想使用交叉聯接來添加所有日期??芍噩F示例讓我們有一個這樣的數據幀:df = pd.DataFrame({'id_col' : np.array([1,1,1,1,1,1,2,2,2,2,2,3,3,3]),                  'value_col' : np.random.randint(0,5,size=14),                  'dates' : pd.to_datetime(np.array([                  '2018-01-01',                  '2018-02-01',                  '2018-03-01',                  '2018-05-01',                  '2018-06-01',                  '2018-09-01',                  '2018-01-01',                  '2018-02-01',                  '2018-05-01',                  '2018-06-01',                  '2018-07-01',                  '2018-01-01',                  '2018-02-01',                  '2018-03-01'])                  )}                 )數據如下所示:    id_col  value_col   dates0   1   0   2018-01-011   1   1   2018-02-012   1   4   2018-03-013   1   0   2018-05-014   1   3   2018-06-015   1   3   2018-09-016   2   4   2018-01-017   2   3   2018-02-018   2   2   2018-05-019   2   0   2018-06-0110  2   2   2018-07-0111  3   4   2018-01-0112  3   2   2018-02-0113  3   3   2018-03-01我嘗試過的方法不起作用:選項 1:完全忽略缺失的日期df.groupby(['id_col']).rolling(2)['value_col'].sum().reset_index()選項 2:基于 pandas 滾動文檔,使用 pandas 偏移參數替換窗口寬度(返回)。如果將日期列用作數據幀的索引,則此方法將起作用。不幸的是,我們不能在這里使用簡單的索引,因為來自id_col的2個不同的ID可以包含相同的日期。(我們可以創建 MultiIndex,但隨后得到相同的值錯誤)。ValueError: window must be an integerdf.groupby(['id_col']).rolling('60d')['value_col'].sum().reset_index()什么有效,但不是很簡單:選項 1:交叉聯接以填寫所有缺失的日期(如果數據量很大,可能很難)選項 2:從可迭代對象的笛卡爾積構建多索引,如這個答案所示。這實際上與上述選項非常相似。
查看完整描述

1 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

使用 參數 。文檔實際上提到了它,盡管沒有示例來查看適當的用法。幸運的是,有pandas github和這個問題,如果你仔細閱讀評論,可以提供有關如何正確使用偏移窗口的滾動功能的一些見解。onrolling

因此,解決方案是:

df.groupby(['id_col']).rolling('60d', on = 'dates')['value_col'].sum().reset_index()

請注意,作為代理的 2 個月而不是這樣,因為會給你以下錯誤:.有關此問題的詳細信息,請查看此處的堆棧溢出問題。60d2m2mValueError: <2 * MonthEnds> is a non-fixed frequency


查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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