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