当前位置: 首页 > 面试题库 >

在pandas DataFrame中查找列的值最大的行

宗政子琪
2023-03-14
问题内容

如何找到特定列的值 最大的行

df.max() 将为我提供每一列的最大值,我不知道如何获取对应的行。


问题答案:

使用熊猫idxmax功能。很简单:

>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
          A         B         C
0  1.232853 -1.979459 -0.573626
1  0.140767  0.394940  1.068890
2  0.742023  1.343977 -0.579745
3  2.125299 -0.649328 -0.211692
4 -0.187253  1.908618 -1.862934
>>> df['A'].argmax()
3
>>> df['B'].argmax()
4
>>> df['C'].argmax()
1
  • 或者,您也可以使用numpy.argmax,例如numpy.argmax(df['A'])-它提供相同的功能,并且至少与idxmax粗略观察中的显示速度一样快。

  • idxmax() 返回索引标签,而不是整数。

    • 示例”:如果您将字符串值作为索引标签,例如行“ a”至“ e”,则可能想知道最大值出现在第4行(而不是“ d”行)。
    • 如果您希望该标签在其中的整数位置,则Index必须手动获取它(由于允许使用重复的行标签,因此可能很棘手)。

历史记录:

  • idxmax()以前在0.11之前被调用argmax()
  • argmax 在1.0.0之前弃用,并在1.0.0中完全删除
  • 从Pandas 0.16开始,它argmax曾经存在并执行相同的功能(尽管运行速度比慢idxmax)。
    • argmax函数返回最大元素的行位置的索引内的 整数位置
    • 熊猫开始使用行标签代替整数索引。 位置整数索引曾经很常见,比标签更常见,特别是在重复行标签很常见的应用程序中。

例如,考虑以下DataFrame带有重复行标签的玩具:

In [19]: dfrm
Out[19]: 
          A         B         C
a  0.143693  0.653810  0.586007
b  0.623582  0.312903  0.919076
c  0.165438  0.889809  0.000967
d  0.308245  0.787776  0.571195
e  0.870068  0.935626  0.606911
f  0.037602  0.855193  0.728495
g  0.605366  0.338105  0.696460
h  0.000000  0.090814  0.963927
i  0.688343  0.188468  0.352213
i  0.879000  0.105039  0.900260

In [20]: dfrm['A'].idxmax()
Out[20]: 'i'

In [21]: dfrm.iloc[dfrm['A'].idxmax()]  # .ix instead of .iloc in older versions of pandas
Out[21]: 
          A         B         C
i  0.688343  0.188468  0.352213
i  0.879000  0.105039  0.900260

因此,单单使用idxmax不足以提供足够的信息,而旧形式的argmax可以正确提供最大行的 位置 (在这种情况下为位置9)。

这恰恰是动态类型语言中那些容易发生错误的令人讨厌的行为之一,这种行为使这种事情非常不幸,值得一搏。如果您正在编写系统代码,并且系统突然被用于某些在加入之前未正确清理的数据集,则很容易以重复的行标签结尾,尤其是字符串标签,例如金融资产的CUSIP或SEDOL标识符。您不能轻松地使用类型系统来帮助您,并且可能无法在索引上强制唯一性而不遇到意外丢失的数据。

因此,您只希望单元测试能够覆盖所有内容(它们没有,或者很可能没有人编写任何测试)-否则(很可能)您只剩下等着看是否碰巧遇到了这个问题运行时错误,在这种情况下,你可能不得不去从你输出结果,碰你的头反对IPython的墙试图手动重现问题数据库中删除多个小时的工作价值,终于搞清楚,这是因为idxmax可以
报告最大行的 标签 ,然后对没有标准函数自动为您获取最大行的 位置 感到失望,自己编写一个有问题的实现,编辑代码,并祈祷您不再遇到问题。



 类似资料:
  • 问题开始是因为我有一个表(Clientes),其中主键不是自动递增的。我想选择存储在列数据库中的最大值。 类似于此选择,但具有雄辩的ORM(Laravel): 我该怎么做? 我试过: 我不喜欢做一个简单的原始 我来不了。 谢谢大家!

  • 问题内容: 我想找到列的2nd,3rd,… nth个最大值。 问题答案: 您可以将列排序为降序格式,然后仅从第n行获取值。 编辑:: 根据评论请求进行了更新。 警告 完全未经测试! 类似于上面的内容对于Oracle应该适用…您可能必须首先正确使用语法!

  • 我在MongoDB有一些收藏,例如下面的一个 我想找到“\u id”或任何其他字段的最小值和最大值。我正在使用“MongoDB指南针”。如何在MongoDB Compass中编写查询,以获得特定列的最小值和最大值

  • 我试图找到矩阵中每列的最小值和最大值,但我当前的代码运行不正确。我试图把最小值放在一个新矩阵的第一行,最大值放在下一行,并对每一列这样做。任何帮助都将不胜感激,谢谢!

  • 本文向大家介绍在Python中的每个子列表中查找最大值,包括了在Python中的每个子列表中查找最大值的使用技巧和注意事项,需要的朋友参考一下 我们得到一个列表列表。在内部列表或子列表中,我们需要在每个列表中找到最大值。 与最大和 我们设计一个带in条件的for循环,并应用max函数来获取每个子列表中的最大值。 示例 输出结果 运行上面的代码给我们以下结果- 带映射和最大 在遍历子列表时,我们继续