【问题标题】:How to extract the n-th maximum/minimum value in a column of a DataFrame in pandas?如何在熊猫的DataFrame的列中提取第n个最大值/最小值?
【发布时间】:2018-06-10 02:50:33
【问题描述】:

我想从 pandas 中 DataFrame 的数值列中获取第 n 个最小值或第 n 个最大值。

例子:

df = pd.DataFrame({'a': [3.0, 2.0, 4.0, 1.0],'b': [1.0, 4.0 , 2.0, 3.0]})

     a    b
0  3.0  1.0
1  2.0  4.0
2  4.0  2.0
3  1.0  3.0

a 列中的第三大值是 2,b 列中的第二小值也是 2。

【问题讨论】:

    标签: python pandas dataframe max min


    【解决方案1】:

    你可以使用nlargest/nsmallest -

    df    
         a    b
    0  3.0  1.0
    1  2.0  4.0
    2  4.0  2.0
    3  1.0  3.0
    
    df.a.nlargest(3).iloc[-1]
    2.0
    

    或者,

    df.a.nlargest(3).iloc[[-1]]
    
    1    2.0
    Name: a, dtype: float64
    

    还有,b——

    df.b.nsmallest(2).iloc[-1]
    2.0
    

    或者,

    df.b.nsmallest(2).iloc[[-1]]
    
    2    2.0
    Name: b, dtype: float64
    

    在这里快速观察 - 这种操作不能向量化。您实际上在这里执行了两种完全不同的操作。

    【讨论】:

    • @KrzysztofSłowiński 不客气。编辑了我的答案。
    • @COLDSPEED 有没有办法只返回一个第 n 个最大/最小行,或者方法是使用 nlargest / nsmallest 然后取最后一行?
    • @KrzysztofSłowiński 另一种选择是调用 x.sort_values() 并访问第 N 个最大/最小值,具体取决于您是按升序还是降序排序。无论哪种方式,您都必须进行排序。
    • 当然,我在想有没有功能或者推荐的方式。
    • @KrzysztofSłowiński 目前只有 nlargest,但未来可能会有 nThLargest :-)
    【解决方案2】:
    df =  
         a    b
    0  3.0  1.0
    1  2.0  4.0
    2  4.0  2.0
    3  1.0  3.0
    
    df.nlargest(3,'a')
       =2.0
    
    df.nsmallest(2,'b')=2.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-23
      • 2020-04-28
      • 1970-01-01
      • 2021-02-08
      • 2018-09-19
      • 2019-01-16
      • 2017-08-27
      • 2017-04-19
      相关资源
      最近更新 更多