【问题标题】:Indices of smallest n values over whole Pandas DF整个 Pandas DF 中最小 n 值的索引
【发布时间】:2022-01-10 00:41:04
【问题描述】:

我正在寻找一种有效的方法来提取整个数据帧中 n 个最小值的索引。

例如,给定以下 n = 2 的 df:

    colA    colB    colC
r1   33      75      22
r2    1      52      95
r3   71       7      68

我想以某种形式获得与整个 df 的 2 个最小值相对应的索引 [(r2, colA), (r3, colB)]:1 和 7。

索引之间的顺序并不重要(对应的值可能没有排序)。

谢谢!

【问题讨论】:

    标签: python pandas dataframe minimum indices


    【解决方案1】:

    除了Neo的回答,同时我也找到了如下解决方案:

    n=2
    list(df.stack().sort_values().head(n).index)
    

    【讨论】:

      【解决方案2】:

      最小的 -

      https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.nsmallest.html

      import pandas as pd
      df=pd.DataFrame({"colA":[33,1,71],"colB":[75,52,7],"colC":[22,95,68]})
      
      df.apply(pd.Series.nsmallest, axis=1, n=1)
      
      df.apply(pd.Series.nsmallest, axis=1, n=2)
      

      【讨论】:

      • 是否有类似的解决方案考虑整个 df,而不是单独考虑每个 col (/row)?
      • 当然@MatanSolomon 数据框中每个数字列的最小值运行'df.min(numeric_only=True)'
      • 对于整个数据帧中的最小值运行'df.min(numeric_only=True).min()'
      • 您所做的是将最小值置于列的最小值之上,如果我需要 n=2(例如)最小值,这可能会有所不同。比如colA = [33,21,71], colB=[75,9,7],最小值确实是7,可以按照你说的提取,但是2个最小值是7,9,当9将不予考虑。我猜对了吗?
      • 有没有办法将 NaN 放置在非最小单元格上,就像你在那里所做的那样,但对整个 df 而言?
      【解决方案3】:

      df.min

      import pandas as pd
      df=pd.DataFrame({"colA":[33,1,71],"colB":[75,52,7],"colC":[22,95,68]})
      
      #The min value for each numerical column in the dataframe
      df.min(numeric_only=True)
      
      #The minimum value in the entire dataframe
      df.min(numeric_only=True).min()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2021-07-11
        • 2021-12-27
        • 2013-05-24
        • 1970-01-01
        相关资源
        最近更新 更多