[英]Rank elements in a data frame while keeping index
我正在使用以下公式來收集數據框中每一行的前20個元素。 它工作得很好,但是它從df_returns中刪除了索引列,但我想保留它們。 我將日期用作df_returns數據框中的索引,並且我希望具有與df_rank數據框中的新數據相對應的相同日期。
df_rank = pd.DataFrame({n: df_returns.T[col].nlargest(21).index.tolist() for n, col in enumerate(df_returns.T)}).T
例如,假設我想從以下數據框中獲得前三名:
A B C D E
1/1/2014 5 4 6 8 1
2/1/2014 2 1 6 3 1
3/1/2014 8 2 3 5 1
我目前得到的結果是:
0 D C A
1 C D A
2 A D C
我想要得到的結果是:
1/1/2014 D C A
2/1/2014 C D A
3/1/2014 A D C
您可以使用set_index
來設置原始數據幀的原始索引:
df_rank.set_index(df_returns.index)
如果要將功能應用於數據框的每一行,那么apply
通常是最好的選擇(我也對函數進行了一些重寫):
d.apply(lambda r: r.sort_values(ascending = False)[0:3].index.tolist(), axis=1)
Out[88]:
1/1/2014 [D, C, A]
2/1/2014 [C, D, A]
3/1/2014 [A, D, C]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.