看板 Python 關於我們 聯絡資訊
各位版友好,這邊有個問題想請教 start, end = '2000-10-01 9:30:00', '2000-10-20 15:30:00' rng = pd.date_range(start, end, freq='10min') ts=pd.DataFrame(data={'DT': rng, 'Value':np.arange(len(rng)) * 2}) ts.set_index('DT', inplace=True) 假設我有一個長得像上面ts的資料 這個資料期間 從10/1 9:30 開始每10分鐘就有資料,直到10/20的15:30 然後我只想取得每一天的10:00到13:00 期間,每50分鐘以內的資料總和 然後最後不滿50分鐘,則以到13:00期間的資料為主 我若想達成這樣,還麻煩版友指點小弟我該如何操作 我知道有resample可以用,可是google看來看去 resample似乎無法取出 每一天的10:00-13:00這段期間的每50分鐘為一組 的資料 因此還盼望版友們能指點,先謝謝了 也謝謝願意了解我問題的各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.101.201 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1608473172.A.9A9.html
TitanEric: 先濾開始跟結束時間 再aggregate看看 12/21 08:01
T大,不好意思,你所謂濾掉開始跟結束意思是要我每一天都分成 10:00-10:50 10:50-11:40 11:40-12:30 12:30-13:00,這些組別嗎 但我不知道該怎麼樣去分會比較快....因為資料數多的時候 我用for迴圈跑有點久,所以想請教版友們是否有相關指令可以分享 謝謝 ※ 編輯: jasonhsu14 (61.230.21.32 臺灣), 12/21/2020 16:17:25
jiyu520: google pandas apply 12/21 18:07
先謝謝你意見,我想是我沒表達清楚 我知道apply這個東西,也會使用 但我的整個問題是說,我不知道該如何以有效的方式去達成 取每一天的10:00-10:50 10:50-11:40 11:40-12:30 12:30-13:00 這些時間區間,並將我的資料分別依照這些期間去分組 再分別取出第一筆、最後一筆與最大最小等,本來是想用resample方式 但該方法無法按照我希望的分類,目前是用for迴圈方式,但效率差 所以想詢問版友是有無效率較好的方式 apply確實是比for有效,但我想不到該如何用apply以達成我的需求 還盼望指教了,謝謝 ※ 編輯: jasonhsu14 (220.135.101.201 臺灣), 12/21/2020 19:06:46
andy19960407: 直覺會是新增一個欄位定義時間區段 然後groupby 12/21 21:01
lycantrope: 不想新增欄位就用pd.cut 12/22 11:00
jiyu520: 對的 我知道你表達目的, 你可以將你要做的事項寫成func 12/22 12:48
jiyu520: 然後對資料表使用apply 12/22 12:49
jiyu520: 所以步驟我想像中或許可以是 12/22 12:50
jiyu520: 1. 對時間欄位進行判斷後新增"時間組別標籤欄位" 12/22 12:51
jiyu520: 2. groupby對某值欄位進行agg取出 max min first last 12/22 12:52
jiyu520: pandas欄位比值運算/query/apply 應該都可以做到1的步驟 12/22 12:55
jiyu520: 可能直接欄位比值就可以達到需求~ 12/22 12:56
先謝謝樓上幾位意見,我會再嘗試看看各位提出的方法,希望能順利達成我需求 也感謝各位的撥空協助 ※ 編輯: jasonhsu14 (220.135.101.201 臺灣), 12/22/2020 19:14:56
aassdd926: 有個 between_time 的api 可以試試用這個過濾 12/23 23:53