代码之家  ›  专栏  ›  技术社区  ›  rnso

获取整个数据帧中具有最小值的行和列

  •  3
  • rnso  · 技术社区  · 6 年前

    这个问题很简单,必须解决,但我找不到。

    我尝试了以下代码(除了各种组合):

    df = pd.DataFrame(data=[[4,5,6],[2,1,3],[7,0,5],[2,5,3]], 
                     index = ['R1','R2','R3','R4'], 
                     columns=['C1','C2','C3'])
    
    print(df)
    
    print(df.loc[df.idxmin(axis=0), df.idxmin(axis=1)])
    

        C1  C2  C3
    R1   4   5   6
    R2   2   1   3
    R3   7   0   5
    R4   2   5   3
    

    loc 命令:

        C1  C2  C2  C1
    R2   2   1   1   2
    R3   7   0   0   7
    R2   2   1   1   2
    

    我需要的是:

        C2
    R3   0
    

    我怎样才能得到这个简单的结果?

    3 回复  |  直到 6 年前
        1
  •  5
  •   jezrael    6 年前

    用途:

    a, b = df.stack().idxmin()
    print(df.loc[[a], [b]])
        C2
    R3   0
    

    另一个@John Zwinck解决方案处理缺失值-使用 numpy.nanargmin :

    df = pd.DataFrame(data=[[4,5,6],[2,np.nan,3],[7,0,5],[2,5,3]], 
        index = ['R1','R2','R3','R4'], 
        columns=['C1','C2','C3'])
    
    print(df)
        C1   C2  C3
    R1   4  5.0   6
    R2   2  NaN   3
    R3   7  0.0   5
    R4   2  5.0   3
    
    #https://stackoverflow.com/a/3230123
    ri, ci = np.unravel_index(np.nanargmin(df.values), df.shape)
    print(df.iloc[[ri], [ci]])
         C2
    R3  0.0
    
        2
  •  1
  •   John Zwinck    6 年前

    np.unravel_index(np.argmin(df.values), df.shape)
    

    这比 df.stack().idxmin()

    它给你一个元组,比如 (2, 1) 在你的例子中。将其传递给df.iloc[]以获取值。

        3
  •  1
  •   U13-Forward    6 年前

    min + 最小 + dropna + T 滴漏 T :

    >>> df[df==df.min(axis=1).min()].dropna(how='all').T.dropna().T
         C2
    R3  0.0
    >>> 
    
    推荐文章