3
我有兩列(col1和col2的)和多級索引(日期和符號),如下一個大熊貓數據幀:過濾器則排名多級索引數據幀
Col1 Col2
Date Symbol
2015-12-01 AAA 0.45 0.53
BBB -1.02 -0.57
CCC -0.41 0.30
2015-11-02 AAA 0.59 -0.42
BBB -2.16 -0.77
CCC -1.02 1.09
2015-10-01 AAA -0.44 -0.88
BBB 0.52 0.27
CCC -1.76 0.63
代碼複製此據幀是:
df = pd.DataFrame({'Date': ['2015-12-01']*3 + ['2015-11-02']*3 + ['2015-10-01']*3,
'Symbol': ['AAA','BBB','CCC']*3,
'Col1': 0.45,-1.02,-0.41,0.59,-2.16,-1.02,-0.44,0.52,-1.76],
'Col2': [0.53,-0.57,0.3,-0.42,-0.77,1.09,-0.88,0.27,0.63]},
).set_index(['Date', 'Symbol'])
在每一個日期,我想選擇前n行(在這種情況下2)的基礎上在Col1中最大的值,然後排在col2的基礎上,值的那些行(最大== 1,第二大== 2等)。添加結果,該原始數據幀列,最終的數據幀應該如下所示:
Col1 Col2 Rank
Date Symbol
2015-12-01 AAA 0.45 0.53 1
CCC -0.41 0.30 2
BBB -1.02 -0.57 NaN
2015-11-02 CCC -1.02 1.09 1
AAA 0.59 -0.42 2
BBB -2.16 -0.77 NaN
2015-10-01 BBB 0.52 0.27 1
AAA -0.44 -0.88 2
CCC -1.76 0.63 NaN
我使用GROUPBY和秩函數嘗試,但我沒法把索引正確。
例如,df.reset_index().groupby(['Date'])['Col1'].nlargest(2)
產量:
Date
2015-10-01 7 0.52
6 -0.44
2015-11-02 3 0.59
5 -1.02
2015-12-01 0 0.45
2 -0.41
但我無法弄清楚如何排名,並把結果返回到數據幀。
感謝您的優雅的解決方案,這正是我試圖完成。 – CurryPy