繁体   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