【问题标题】:return max value from pandas dataframe as a whole, not based on column or rows从 pandas 数据帧整体返回最大值,而不是基于列或行
【发布时间】:2014-08-25 14:22:13
【问题描述】:

我正在尝试从整个熊猫数据框中获取最大值。我对它来自哪一行或哪一列不感兴趣。我只对 DataFrame 中的单个最大值感兴趣。

这是我的数据框:

df = pd.DataFrame({'group1': ['a','a','a','b','b','b','c','c','d','d','d','d','d'],
                        'group2': ['c','c','d','d','d','e','f','f','e','d','d','d','e'],
                        'value1': [1.1,2,3,4,5,6,7,8,9,1,2,3,4],
                        'value2': [7.1,8,9,10,11,12,43,12,34,5,6,2,3]})

这就是它的样子:

   group1 group2  value1  value2
0       a      c     1.1     7.1
1       a      c     2.0     8.0
2       a      d     3.0     9.0
3       b      d     4.0    10.0
4       b      d     5.0    11.0
5       b      e     6.0    12.0
6       c      f     7.0    43.0
7       c      f     8.0    12.0
8       d      e     9.0    34.0
9       d      d     1.0     5.0
10      d      d     2.0     6.0
11      d      d     3.0     2.0
12      d      e     4.0     3.0

预期输出:

43.0

我假设 df.max() 会完成这项工作,但它会为每列返回一个最大值,但我对此不感兴趣。我需要整个数据帧的最大值。

【问题讨论】:

  • max(df.max(axis=1)) 你想要什么?这假设您只对数值感兴趣?
  • 另外online docs 也很清楚df.max() 做了什么,
  • 为什么投反对票?如果这是原因,我误解了 df.max()?
  • 不知道,不是我,我对这个问题没有太大的问题
  • 不是直接针对您 EdChum,但非常感谢您的意见!很多东西要学...

标签: python pandas max dataframe


【解决方案1】:

可以使用df.to_numpy().max()获取DataFrame中所有值的最大值,或者对于pandas < 0.24.0我们使用df.values.max()

In [10]: df.to_numpy().max()
Out[10]: 'f'

最大值是 f 而不是 43.0,因为在 CPython2 中,

In [11]: 'f' > 43.0
Out[11]: True

在 CPython2 中,Objects of different types ... are ordered by their type names。所以任何str 都比任何int 都大,因为'str' > 'int'

在 Python3 中,字符串和整数的比较会产生 TypeError


要仅在数字列中查找最大值,请使用

df.select_dtypes(include=[np.number]).max()

【讨论】:

  • 另外max(df.max()) 也将返回'f' 也许值得指出
  • 那么,如何跳过字符串,获取最大数值呢?
  • @Sigur: df.select_dtypes(include=[np.number]).max().
  • 如何为特定列执行此操作:例如col1?我试过df['col1'],但没有。
  • df['col1'].max() 应该返回col1 列中的最大值。如果这对您不起作用,请发布一个新问题,其中包含您的数据框的一小部分样本(发布类似 df.head().to_dict('list') 的内容很有帮助)。
【解决方案2】:

您好,最简单的答案如下。 答:

df.max().max()

解释:
series = df.max() 给你一个包含每列最大值的系列。
因此,series.max()为您提供整个数据帧的最大值。

:) 最好的答案通常是最简单的

【讨论】:

    【解决方案3】:

    另一种方式:

    df.melt().value.max()
    

    基本上melt() 将DataFrame 转换为一长列。

    【讨论】:

      【解决方案4】:

      对于最大值,请检查上一个答案... 对于值的最大值,请使用例如:

      val_cols = [c for c in df.columns if c.startswith('val')]
      print df[val_cols].max()
      

      【讨论】:

        【解决方案5】:

        Max 可以在这两个步骤中找到:

        maxForRow = allData.max(axis=0) #max for each row
        globalMax = maxForRow.max(); #max across all rows
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-04
          • 2023-04-10
          • 2016-02-07
          • 1970-01-01
          • 2021-02-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多