[英]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.