[英]Pandas Q-cut: Binning Data using an Expanding Window Approach
這個問題有點類似於我在同一主題上發現的2018 年問題。
我希望如果我以更簡單的方式提問,有人將能夠找出我目前面臨的問題的簡單解決方案:
我有一個名為“df”的時間序列數據框,其結構大致如下:
V_1 V_2 V_3 V_4
1/1/2000 17 77 15 88
1/2/2000 85 78 6 59
1/3/2000 31 9 49 16
1/4/2000 81 55 28 33
1/5/2000 8 82 82 4
1/6/2000 89 87 57 62
1/7/2000 50 60 54 49
1/8/2000 65 84 29 26
1/9/2000 12 57 53 84
1/10/2000 6 27 70 56
1/11/2000 61 6 38 38
1/12/2000 22 8 82 58
1/13/2000 17 86 65 42
1/14/2000 9 27 42 86
1/15/2000 63 78 18 35
1/16/2000 73 13 51 61
1/17/2000 70 64 75 83
如果我想使用所有列來生成每日分位數,我會遵循以下方法:
quantiles = df.apply(lambda x: pd.qcut(x, 5, duplicates='drop', labels=False), axis=0)
輸出如下所示:
V_1 V_2 V_3 V_4
2000-01-01 1 3 0 4
2000-01-02 4 3 0 3
2000-01-03 2 0 2 0
2000-01-04 4 1 0 0
2000-01-05 0 4 4 0
2000-01-06 4 4 3 3
2000-01-07 2 2 3 2
2000-01-08 3 4 1 0
2000-01-09 0 2 2 4
2000-01-10 0 1 4 2
2000-01-11 2 0 1 1
2000-01-12 1 0 4 2
2000-01-13 1 4 3 1
2000-01-14 0 1 1 4
2000-01-15 3 3 0 1
2000-01-16 4 0 2 3
2000-01-17 3 2 4 4
我想做的事:
我想使用在特定時間點之前和發生的觀察來生成“df”中數據的分位數。 我不希望包括在特定時刻后發生的觀察。
例如:
否則,我想使用這種方法來計算“df”中所有數據點的箱。 也就是說,計算從 2000 年 1 月 1 日到 2000 年 1 月 17 日的 bin。
總之,我想做的是進行一個擴展窗口q-cut(如果有的話)。 在處理時間序列數據時,它有助於避免“前瞻”偏差。
下面的這個代碼塊是錯誤的,但它准確地說明了我想要完成的事情:
quantiles = df.expanding().apply(lambda x: pd.qcut(x, 5, duplicates='drop', labels=False), axis=0)
我是新手,所以對此持保留態度,但是當分解時,我相信您的問題是重復的,因為它需要簡單的日期時間索引切片在此處回答。
lt_jan_5 = df.loc[:'2000-01-05'].apply(lambda x: pd.qcut(x, 5, duplicates='drop', labels=False), axis=0)
print(lt_jan_5)
V_1 V_2 V_3 V_4
2000-01-01 1 2 1 4
2000-01-02 4 3 0 3
2000-01-03 2 0 3 1
2000-01-04 3 1 2 2
2000-01-05 0 4 4 0
希望這有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.