注意:我已經(jīng)知道這個(gè)問(wèn)題的答案,我發(fā)布它只是因?yàn)槲以诙褩R绯錾险也坏秸_的答案,我花了驚人的時(shí)間來(lái)弄清楚它。話(huà)雖如此,請(qǐng)隨時(shí)建議其他選項(xiàng)。問(wèn)題我有一個(gè)帶有三列的pandas DataFrame,一個(gè)跟蹤日期,一個(gè)跟蹤相關(guān)觀察結(jié)果(即我的分組列),第三個(gè)變量存儲(chǔ)一些數(shù)值。對(duì)于我的數(shù)據(jù)幀中的每個(gè)組,我想計(jì)算日期列上的滾動(dòng)總和。警告:數(shù)據(jù)幀中缺少一些日期,我想將它們視為值為0的觀測(cè)值。我不想使用交叉聯(lián)接來(lái)添加所有日期??芍噩F(xiàn)示例讓我們有一個(gè)這樣的數(shù)據(jù)幀: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']) )} )數(shù)據(jù)如下所示: 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我嘗試過(guò)的方法不起作用:選項(xiàng) 1:完全忽略缺失的日期df.groupby(['id_col']).rolling(2)['value_col'].sum().reset_index()選項(xiàng) 2:基于 pandas 滾動(dòng)文檔,使用 pandas 偏移參數(shù)替換窗口寬度(返回)。如果將日期列用作數(shù)據(jù)幀的索引,則此方法將起作用。不幸的是,我們不能在這里使用簡(jiǎn)單的索引,因?yàn)閬?lái)自id_col的2個(gè)不同的ID可以包含相同的日期。(我們可以創(chuàng)建 MultiIndex,但隨后得到相同的值錯(cuò)誤)。ValueError: window must be an integerdf.groupby(['id_col']).rolling('60d')['value_col'].sum().reset_index()什么有效,但不是很簡(jiǎn)單:選項(xiàng) 1:交叉聯(lián)接以填寫(xiě)所有缺失的日期(如果數(shù)據(jù)量很大,可能很難)選項(xiàng) 2:從可迭代對(duì)象的笛卡爾積構(gòu)建多索引,如這個(gè)答案所示。這實(shí)際上與上述選項(xiàng)非常相似。
1 回答

滄海一幻覺(jué)
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
使用 參數(shù) 。文檔實(shí)際上提到了它,盡管沒(méi)有示例來(lái)查看適當(dāng)?shù)挠梅āP疫\(yùn)的是,有pandas github和這個(gè)問(wèn)題,如果你仔細(xì)閱讀評(píng)論,可以提供有關(guān)如何正確使用偏移窗口的滾動(dòng)功能的一些見(jiàn)解。on
rolling
因此,解決方案是:
df.groupby(['id_col']).rolling('60d', on = 'dates')['value_col'].sum().reset_index()
請(qǐng)注意,作為代理的 2 個(gè)月而不是這樣,因?yàn)闀?huì)給你以下錯(cuò)誤:.有關(guān)此問(wèn)題的詳細(xì)信息,請(qǐng)查看此處的堆棧溢出問(wèn)題。60d
2m
2m
ValueError: <2 * MonthEnds> is a non-fixed frequency
添加回答
舉報(bào)
0/150
提交
取消