在整个Pandas DataFrame中获取具有最小值的行和列

时间:2018-11-14 06:10:37

标签: python pandas

问题很简单,因此必须解决,但我找不到它。

我想找到Pandas DataFrame中的哪行和哪一行具有最小值,多少。

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

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)])

要搜索的数据帧(df)是:

    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 个答案:

答案 0 :(得分:2)

使用:

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

答案 1 :(得分:1)

我将以这种方式获取索引:

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

这比df.stack().idxmin()快得多。

它为您提供了一个元组,例如您的示例中的(2, 1)。将其传递给df.iloc []以获取值。

答案 2 :(得分:1)

min + min + dropna + T + dropna + T

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