簡體   English   中英

大熊貓從時間序列索引中同時切片多個窗口

[英]pandas slice multiple windows simultaneously from time series index

我有一個腳本,該腳本會生成包含日期“塊”的數據幀,並將其存儲在諸如“ cur_blocks”這樣的變量中:

                  year      start        end       date
gmt_reportedtime                                       
2019-03-11        2000 2000-01-09 2000-03-10 2019-03-11
2019-03-11        2001 2001-01-09 2001-03-10 2019-03-11
2019-03-11        2002 2002-01-09 2002-03-10 2019-03-11
2019-03-11        2003 2003-01-09 2003-03-10 2019-03-11
2019-03-11        2004 2004-01-09 2004-03-10 2019-03-11

我還有另一個在日期時間索引的數據幀“ col”,其中包含我想進行下游計算(例如排名和z分數)的數據。 我想使用“ cur_blocks”的“ start”和“ end”中表示的塊對col的多個塊進行切片。 “ cur_blocks”中的日期塊是60天的時段,每個時段在2000-2019年之間間隔1年。

這是“ col”:

              X
2000-01-01   24
2000-01-02   90
2000-01-03   62
2000-01-04   10
...
2019-02-28   73
2019-03-01   96

[7000 rows x 1 columns]

到目前為止,我已經這樣解決了:

window_aggregate = pd.DataFrame()
for index, block in cur_blocks.iterrows():
    dt_block = col.loc[block['start']:block['end']]
    window_aggregate = pd.concat([window_aggregate, dt_block])

然后,我可以使用“ window_aggregate”進行下游工作。 這行得通,但是它非常慢,因為會為2000年1月1日至今天之間的每個日期生成“ cur_blocks”。

我很驚訝熊貓沒有內置函數來執行此類操作? 除非我錯過了? 但是另一個堆棧溢出的用戶也提出了類似的問題,到目前為止, 這里還沒有回答

我最近在這里發布了一個問題,詳細介紹了更廣泛的問題,盡管我編寫的代碼主要解決了該問題,但對於實際目的而言,它太慢了。

我已經看到它在這里解決了幾年的一天,但是沒有窗戶。

這里可能有解決方案但我不知道如何將答案應用於我的數據

編輯:顯示所需的輸出,如下所示,數據框中的日期與cur_blocks中的開始和結束塊相對應

期望的輸出

  X 2000-01-09 24 2000-01-10 90 ... 2000-03-10 62 2001-01-09 10 2001-01-10 10 ... 2001-03-10 10 2002-01-09 10 ... ... ... 2004-03-10 73 

我會在一年中合並兩個數據框。 然后,您可以簡單地使用行的過濾條件來過濾結果數據框,其中col的日期在startend日期之間。 在合並所需的各種索引操作和最終的列選擇之后,它給出:

pd.DataFrame(pd.concat([col, pd.Series(col.index.year,
                       index=col.index, name='year')],axis=1)
         .rename_axis('dat').reset_index().merge(cur_blocks, on='year')
         .query('(start <= dat) & (dat <= end)').set_index('dat')
         .rename_axis('')['X'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM