【问题标题】:find 3 largest values in every column in data frame and get the index number python在数据框中的每一列中查找 3 个最大值并获取索引号 python
【发布时间】:2019-05-08 00:43:35
【问题描述】:

我有这样的数据框

        A         B         C         D    
0  0.037949  0.021150  0.127416  0.040137  
1  0.025174  0.007935  0.011774  0.003491  
2  0.022339  0.019022  0.024849  0.018062  
3  0.017205  0.051902  0.033246  0.018605  
4  0.044075  0.044006  0.065896  0.021264

并且我想获取每列中具有 3 个最大值的索引值的数据框。期望的输出

       A         B         C         D    
0      4         3         0         0
1      0         4         4         4
2      1         0         3         3

【问题讨论】:

  • 我认为这些链接的问题都不是完全重复的。
  • (里面的答案比这里适用的更复杂)

标签: python pandas sorting dataframe


【解决方案1】:

这样的事情应该可以工作:

您可以使用nlargest 函数获取Top 3 值。

In [1979]: result = pd.DataFrame([df[i].nlargest(3).index.tolist() for i in df.columns]).T

In [1974]: result
Out[1974]: 
   A  B  C  D
0  4  3  0  0
1  0  4  4  4
2  1  0  3  3

【讨论】:

    【解决方案2】:

    给定

    >>> df
              A         B         C         D
    0  0.037949  0.021150  0.127416  0.040137
    1  0.025174  0.007935  0.011774  0.003491
    2  0.022339  0.019022  0.024849  0.018062
    3  0.017205  0.051902  0.033246  0.018605
    4  0.044075  0.044006  0.065896  0.021264
    

    您可以将DataFrame.applySeries.nlargest 结合使用:

    >>> df.apply(lambda s: pd.Series(s.nlargest(3).index))
       A  B  C  D
    0  4  3  0  0
    1  0  4  4  4
    2  1  0  3  3
    

    【讨论】:

      【解决方案3】:

      你可以通过 NumPy argsort,然后切片:

      res = pd.DataFrame(df.values.argsort(0), columns=df.columns)\
              .iloc[len(df.index): -4: -1]
      
      print(res)
      
         A  B  C  D
      4  4  3  0  0
      3  0  4  4  4
      2  1  0  3  3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-13
        • 2015-06-12
        • 2014-10-11
        • 2018-09-29
        • 1970-01-01
        • 2017-09-19
        • 2012-07-16
        • 1970-01-01
        相关资源
        最近更新 更多