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

2024-04-28

我有以下数据框:

  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

它显示了每个商品的前 3 名畅销商品user_id。我已经使用了dplyrR 中的包,但我正在寻找 pandas 的等效项。


你可以使用np.argsort http://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html找到的索引n每行最大的项目:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找每个 pandas 数据帧行中前 n 个最高值列的名称 的相关文章

随机推荐