【问题标题】:pandas: idxmax for k-th largestpandas:第 k 个最大的 idxmax
【发布时间】:2020-01-29 10:49:35
【问题描述】:

拥有df 的概率分布,我得到df.idxmax(axis=1) 行的最大概率,如下所示:

df['1k-th'] = df.idxmax(axis=1)

得到如下结果:

(如果看不到所有列,请向右滚动表格)

    0           1           2           3           4           5           6           1k-th
0   0.114869    0.020708    0.025587    0.028741    0.031257    0.031619    0.747219    6
1   0.020206    0.012710    0.010341    0.012196    0.812495    0.113863    0.018190    4
2   0.023585    0.735475    0.091795    0.021683    0.027581    0.054217    0.045664    1
3   0.009834    0.009175    0.013165    0.016014    0.015507    0.899115    0.037190    5
4   0.023357    0.736059    0.088721    0.021626    0.027341    0.056289    0.046607    1

问题是如何获得第 2 次、第 3 次等概率,以便得到以下结果?:

    0           1           2           3           4           5           6           1k-th   2-th
0   0.114869    0.020708    0.025587    0.028741    0.031257    0.031619    0.747219    6       0
1   0.020206    0.012710    0.010341    0.012196    0.812495    0.113863    0.018190    4       3
2   0.023585    0.735475    0.091795    0.021683    0.027581    0.054217    0.045664    1       4
3   0.009834    0.009175    0.013165    0.016014    0.015507    0.899115    0.037190    5       4
4   0.023357    0.736059    0.088721    0.021626    0.027341    0.056289    0.046607    1       2

谢谢!

【问题讨论】:

  • 您的问题已经回答here

标签: pandas


【解决方案1】:

我自己的解决方案不是最漂亮的,但它的工作和运行速度很快:

for i in range(7):
    p[f'{i}k'] = p[[0,1,2,3,4,5,6]].idxmax(axis=1)
    p[f'{i}k_v'] = p[[0,1,2,3,4,5,6]].max(axis=1)

    for x in range(7):
        p[x] = np.where(p[x]==p[f'{i}k_v'], np.nan, p[x])

循环执行:

  • 找到最大值和它的列索引
  • 删除找到的值(设置为nan) 再次
  • 找到第二个最大值
  • 删除找到的值
  • 等...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多