【问题标题】:Pandas idxmax() get column name corresponding to max value in rowPandas idxmax() 获取对应于行中最大值的列名
【发布时间】:2016-07-30 07:22:20
【问题描述】:

假设我有以下 DataFrame Q_df:

        (0, 0)  (0, 1)  (0, 2)  (1, 0)  (1, 1)  (1, 2)  (2, 0)  (2, 1)  (2, 2)
(0, 0)   0.000    0.00     0.0    0.64   0.000     0.0   0.512   0.000     0.0
(0, 1)   0.000    0.00     0.8    0.00   0.512     0.0   0.000   0.512     0.0
(0, 2)   0.000    0.64     0.0    0.00   0.000     0.8   0.000   0.000     1.0
(1, 0)   0.512    0.00     0.0    0.00   0.000     0.8   0.512   0.000     0.0
(1, 1)   0.000    0.64     0.0    0.00   0.000     0.0   0.000   0.512     0.0
(1, 2)   0.000    0.00     0.8    0.64   0.000     0.0   0.000   0.000     1.0
(2, 0)   0.512    0.00     0.0    0.64   0.000     0.0   0.000   0.512     0.0
(2, 1)   0.000    0.64     0.0    0.00   0.512     0.0   0.512   0.000     0.0
(2, 2)   0.000    0.00     0.8    0.00   0.000     0.8   0.000   0.000     0.0

使用以下代码生成:

import numpy as np
import pandas as pd

states = list(itertools.product(range(3), repeat=2))

Q = np.array([[0.000,0.000,0.000,0.640,0.000,0.000,0.512,0.000,0.000],
[0.000,0.000,0.800,0.000,0.512,0.000,0.000,0.512,0.000],
[0.000,0.640,0.000,0.000,0.000,0.800,0.000,0.000,1.000],
[0.512,0.000,0.000,0.000,0.000,0.800,0.512,0.000,0.000],
[0.000,0.640,0.000,0.000,0.000,0.000,0.000,0.512,0.000],
[0.000,0.000,0.800,0.640,0.000,0.000,0.000,0.000,1.000],
[0.512,0.000,0.000,0.640,0.000,0.000,0.000,0.512,0.000],
[0.000,0.640,0.000,0.000,0.512,0.000,0.512,0.000,0.000],
[0.000,0.000,0.800,0.000,0.000,0.800,0.000,0.000,0.000]])

Q_df = pd.DataFrame(index=states, columns=states, data=Q)

对于Q的每一行,我想获取该行中最大值对应的列名。如果我尝试

policy = Q_df.idxmax()

那么生成的 Series 如下所示:

(0, 0)    (1, 0)
(0, 1)    (0, 2)
(0, 2)    (0, 1)
(1, 0)    (0, 0)
(1, 1)    (0, 1)
(1, 2)    (0, 2)
(2, 0)    (0, 0)
(2, 1)    (0, 1)
(2, 2)    (0, 2)

第一行看起来没问题:第一行的最大元素是0.64,并出现在(1,0) 列中。第二个也是如此。然而,对于第三行,最大元素是 0.8 并出现在 (1,2) 列中,所以我希望 policy 中的对应值是 (1,2),而不是 (0,1)。

知道这里出了什么问题吗?

【问题讨论】:

    标签: python pandas max argmax


    【解决方案1】:

    IIUC,你可以在idxmax中使用axis=1:

    policy = Q_df.idxmax(axis=1)
    
    (0, 0)    (1, 0)
    (0, 1)    (0, 2)
    (0, 2)    (2, 2)
    (1, 0)    (1, 2)
    (1, 1)    (0, 1)
    (1, 2)    (2, 2)
    (2, 0)    (1, 0)
    (2, 1)    (0, 1)
    (2, 2)    (0, 2)
    dtype: object
    

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多