簡體   English   中英

Pandas 居中滾動窗口排名返回錯誤值

[英]Pandas centred rolling window rank returns wrong value

我正在嘗試在 Pandas 的滾動窗口中計算列值的排名,如下所示:

df = pd.DataFrame( [[1, 10],
                    [2, 20],
                    [3, 50],
                    [4, 30],
                    [5, 40]], 
                   columns=['order_col', 'rank_col'])
df['rank'] = df.rolling(3, center=True, min_periods=1, on='order_col')['rank_col'].rank()

rank() 的結果雖然給出了窗口中最后一行的排名,而不是中心的排名,正如預期的那樣:

數據幀的圖像

有什么想法可以讓我獲得正確行的排名嗎? 即我希望排名為 1, 2, 3, 1, 2

編輯:我選擇了一個小例子來說明問題,但實際上我的數據框有數千行,滾動窗口的大小為 100+ 行。

以下是一種解決方法,您將在 apply 中使用 rank 並明確采用中心值。

代碼檢查系列的索引以識別它是第一個窗口而不是最后一個窗口。

def series_rank_center(series):
    if 1 in series.index and len(series) < 3:
        return series.rank().iat[0]  # center value for first window
    else:
        return series.rank().iat[1]  # center value

df.rolling(3, center=True, min_periods=1, on='order_col').apply(series_rank_center)
   order_col  rank_col
0          1       1.0
1          2       2.0
2          3       3.0
3          4       1.0
4          5       2.0

暫無
暫無

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

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