Pandas 熊猫:第k大熊猫的idxmax
有了概率分布的Pandas 熊猫:第k大熊猫的idxmax,pandas,Pandas,有了概率分布的df,我得到了df.idxmax(axis=1)行的最大概率,如下所示: df['1k-th'] = df.idxmax(axis=1) 并得到如下结果: (如果看不到所有列,请向右滚动表格) 问题是如何得到第2、3等概率,从而得到以下结果: 0 1 2 3 4 5 6 1k-th 2-th 0 0.114869 0.0
df
,我得到了df.idxmax(axis=1)
行的最大概率,如下所示:
df['1k-th'] = df.idxmax(axis=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
谢谢大家! 我自己的解决方案不是最漂亮的,但它确实有效,而且运行速度很快:
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
- 查找第二大值
- 删除找到的值
- 等等。。。
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])