问题很简单,因此必须解决,但我找不到它。
我想找到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
如何获得这个简单的结果?
答案 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
>>>