在保持索引的同时对数据框中的元素进行排名

时间:2016-01-05 21:03:35

标签: python pandas dataframe

我使用以下公式来收集数据框中每行的前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

2 个答案:

答案 0 :(得分:1)

您可以使用set_index设置新数据框的原始索引:

{{1}}

答案 1 :(得分:0)

如果你想将一个函数应用于数据框的每一行,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]