簡體   English   中英

使用滾動 12 個月窗口將自定義函數應用於 Pandas Group

[英]Apply Custom Function to Pandas Groupby using Rolling 12 Month Window

我有以下數據框,這是一個示例:

Area    Num Month   Year    Type    Result
AA      1   Jan     2015    A       1
AA      1   Feb     2015    A       2
AA      1   Mar     2015    A       3
AA      1   Apr     2015    A       4
AA      1   May     2015    A       5
AA      1   Jun     2015    A       6
AA      1   Jul     2015    A       7
AA      1   Aug     2015    A       8
AA      1   Sep     2015    A       9
AA      1   Oct     2015    A       10
AA      1   Nov     2015    A       11
AA      1   Dec     2015    A       12
BB      2   Jan     2015    B       1
BB      2   Feb     2015    B       2
BB      2   Mar     2015    B       3
BB      2   Apr     2015    B       4
BB      2   May     2015    B       5
BB      2   Jun     2015    B       6
BB      2   Jul     2015    B       7
BB      2   Aug     2015    B       8
BB      2   Sep     2015    B       9
BB      2   Oct     2015    B       10
BB      2   Nov     2015    B       11
BB      2   Dec     2015    B       12

我需要按 Columns: AreaNumTypeYear進行分組,並計算每個組的第 90 個百分位數。 我為每個Area有多個NumType

我的預期輸出是:

我需要為每個組計算前 12 個月的 12 個月百分位值,並將輸出粘貼到下個月。

例如:使用 {Area:AA,Num:1,Year:2015,Type:A} 計算組的第 90 個百分位值並將其分配給 {Area:AA,Num:1,Year:2016,Type:A,月份:一月}。

Area    Num Month   Year    Type    Result
AA      1   Jan     2016    A       10.9
AA      1   Feb     2016    A       10.99

現在對於新組(Month February){Area:AA,Num:1,Year:2016,Type:A,Month:Feb} 應該計算從 2015 年 2 月到 2016 年 1 月的結果列第 90 個百分位數的值,依此類推。

我正在尋找單獨計算百分位數和 groupby 的解決方案,但我對如何在此移動窗口上計算百分位數感到困惑。

df2 = df.assign(date=pd.to_datetime(df.Year.astype(str).add("-").add(df.Month.astype(str)).add("-").add(str(1))))
df2 = df2.set_index('date')
df2.groupby(['Area','Num','Type'])['Result'].rolling(12,min_periods=3).quantile(.9).reset_index()

輸出:

   Area  Num Type       date  Result
0    AA    1    A 2015-01-01     NaN
1    AA    1    A 2015-02-01     NaN
2    AA    1    A 2015-03-01     2.0
3    AA    1    A 2015-04-01     3.0
4    AA    1    A 2015-05-01     4.0
5    AA    1    A 2015-06-01     5.0
6    AA    1    A 2015-07-01     6.0
7    AA    1    A 2015-08-01     7.0
8    AA    1    A 2015-09-01     8.0
9    AA    1    A 2015-10-01     9.0
10   AA    1    A 2015-11-01    10.0
11   AA    1    A 2015-12-01    10.0
12   BB    2    B 2015-01-01     NaN
13   BB    2    B 2015-02-01     NaN
14   BB    2    B 2015-03-01     2.0
15   BB    2    B 2015-04-01     3.0
16   BB    2    B 2015-05-01     4.0
17   BB    2    B 2015-06-01     5.0
18   BB    2    B 2015-07-01     6.0
19   BB    2    B 2015-08-01     7.0
20   BB    2    B 2015-09-01     8.0
21   BB    2    B 2015-10-01     9.0
22   BB    2    B 2015-11-01    10.0
23   BB    2    B 2015-12-01    10.0

暫無
暫無

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

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