在每个pandas数据帧行中查找top-n最高值列的名称

时间:2016-08-15 12:33:57

标签: python pandas dataframe top-n

我有以下数据框:

  id     p1 p2 p3 p4
  1      0  9  1  4
  2      0  2  3  4
  3      1  3 10  7
  4      1  5  3  1
  5      2  3  7 10

我需要重新整形数据框,对于每个id,它将具有最高值的前3列。结果是这样的:

 id top1 top2 top3
  1  p2   p4   p3
  2  p4   p3   p2
  3  p3   p4   p2
  4  p2   p3   p4/p1
  5  p4   p3   p2

它显示了每个user_id的前三名畅销书。我已经使用R中的dplyr包完成了它,但我正在寻找等效的pandas。

1 个答案:

答案 0 :(得分:5)

您可以使用:

df = df.set_index('id').apply(lambda x: pd.Series(x.sort_values(ascending=False)
       .iloc[:3].index, 
      index=['top1','top2','top3']), axis=1).reset_index()
print (df)
   id top1 top2 top3
0   1   p2   p4   p3
1   2   p4   p3   p2
2   3   p3   p4   p2
3   4   p2   p3   p4
4   5   p4   p3   p2