【问题标题】:Pandas Dataframe: get index of max elementPandas Dataframe:获取最大元素的索引
【发布时间】:2017-01-29 23:45:11
【问题描述】:

我正在寻找一种方法来获取 Pandas DataFrame 中最大元素的索引和列。到目前为止,这是我的代码:

idx = range(0, 50, 5)
col = range(0, 50, 5)
scores = pd.DataFrame(np.zeros((len(idx), len(col))), index=idx, columns=col, dtype=float)
scores.loc[11, 16] = 5 #Assign a random element

这给了我以下数据框:

  | 1   6   11  16  21  26  31  36  41  46
------------------------------------------
1 | 0   0   0   0   0   0   0   0   0   0
6 | 0   0   0   0   0   0   0   0   0   0
11| 0   0   0   5   0   0   0   0   0   0
16| 0   0   0   0   0   0   0   0   0   0
21| 0   0   0   0   0   0   0   0   0   0
26| 0   0   0   0   0   0   0   0   0   0
31| 0   0   0   0   0   0   0   0   0   0
36| 0   0   0   0   0   0   0   0   0   0
41| 0   0   0   0   0   0   0   0   0   0
46| 0   0   0   0   0   0   0   0   0   0

之后,我使用unstack方法:

unstacked = scores.unstack().copy()
unstacked.sort(ascending=False)

这给了我:

16  11    5
46  46    0
16  31    0
11  31    0
    36    0
...

如何获取最大值的索引和列?我想从包含(16, 11) 的数组或元组中得到一些东西。

【问题讨论】:

标签: python indexing pandas dataframe


【解决方案1】:

您正在寻找idxmax:

In [1332]: x
Out[1332]: 
   1  6  11  16  21  26  31  36  41  46
0  0  0   0   0   0   0   0   0   0   0
1  0  0   0   0   0   0   0   0   0   0
2  0  0   5   0   0   0   0   0   0   0
3  0  0   0   0   0   0   0   0   0   0
4  0  0   0   0   0   0   0   0   0   0
5  0  0   0   0   0   0   0   0   0   0
6  0  0   0   0   0   0   0   0   0   0
7  0  0   0   0   0   0   0   0   0   0
8  0  0   0   0   0   0   0   0   0   0
9  0  0   0   0   0   0   0   0   0   0

最大值所在行:

In [1337]: max(x.idxmax())
Out[1337]: 2

最大值列(maxs 太多):

In [1359]: x.max()[x.max() == x.max(axis=1).max()].index
Out[1359]: Index([u'11'], dtype='object')

【讨论】:

    【解决方案2】:
    x.max()[x.max() == x.max(axis=1).max()].index 
    

    这可以获取列,但max(x.idxmax()) 仅返回索引本身的数值最大值,而不是表中最大值的索引(在此示例中很幸运,因为其他所有内容都是 0)。另一种选择是:

    s = x.max()[x.max() == x.max(index=1).max()].index
    s = str(s[0])
    max_index = x.idxmax()[s]
    

    【讨论】:

    • 这正是我一直在寻找的,但我有点惊讶没有更有效的答案......就像让 idxmax 在列案例中返回一个数字的方法。当您只需要整数时,您最终可能会存储数百万个字符串,我不明白为什么有人希望这是默认行为...@_@
    • 是的,我同意。我在时间紧迫的情况下编写了这段代码,并没有进一步研究这个问题,但我搜索了很多,一无所获。对于 idxmax() 来说也是处理这种情况的理想选择。
    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 2022-06-27
    • 2016-10-18
    • 2014-03-10
    • 2017-06-02
    • 2011-02-11
    • 2022-08-16
    • 2019-03-17
    相关资源
    最近更新 更多