查找每个大 pandas 数据帧行中top-n个最高值列的名称 [英] Find names of top-n highest-value columns in each pandas dataframe row

查看:152
本文介绍了查找每个大 pandas 数据帧行中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 的前3名畅销书。我已经使用R中的 dplyr 包,但我正在寻找等同的熊猫。

解决方案

您可以使用 np.argsort ,以查找每行 n 最大项目的索引:



作为pp

$ b df = pd.DataFrame({'id':[1,2,3, 4,5],
'p1':[0,0,1,1,2],
'p2':[9,2,3,5,3],
' p3':[1,3,10,3,7],
'p4':[4,4,7,1,10]})
df = df.set_index('id'

nlargest = 3
order = np.argsort(-df.values,axis = 1)[:, nlargest]
result = pd.DataFrame(df.columns [订单],
columns = ['top {}'。格式(i)for i in range(1,nlargest + 1)],
index = df.index)

打印(结果)

yield

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


I have the following dataframe:

  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

I need to reshape the data frame in a way that for each id it will have the top 3 columns with the highest values. The result would be like this:

 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

It shows the top 3 best sellers for every user_id. I have already done it using the dplyr package in R, but I am looking for the pandas equivalent.

解决方案

You could use np.argsort to find the indices of the n largest items for each row:

import numpy as np
import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3, 4, 5],
 'p1': [0, 0, 1, 1, 2],
 'p2': [9, 2, 3, 5, 3],
 'p3': [1, 3, 10, 3, 7],
 'p4': [4, 4, 7, 1, 10]})
df = df.set_index('id')

nlargest = 3
order = np.argsort(-df.values, axis=1)[:, :nlargest]
result = pd.DataFrame(df.columns[order], 
                      columns=['top{}'.format(i) for i in range(1, nlargest+1)],
                      index=df.index)

print(result)

yields

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

这篇关于查找每个大 pandas 数据帧行中top-n个最高值列的名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆