簡體   English   中英

在保持索引的同時對數據框中的元素進行排名

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

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