查找pandas DataFrame的列名,其中行值最小

时间:2019-02-28 17:28:33

标签: python pandas numpy

我有一个如下所示的DataFrame:

X = np.array([[1.0, -20, 200, 50],
              [2.0, 19, 100, 52],
              [3.0, 17, -150, 55],
              [4.0, 20, -120, 60],
              [5.0, 21, 119, 70],
              [6.0, -15, 134, -75],
              [7.0, 9, 178, -80],
              [8.0, 10, -190, 90],
              [9.0, 19, 200, 70],
              [10.0, 20, 210, 65]])

native_id1 = ['08MB005', '08ME005', '08GD006','08GH002']
native_id2 = ['08CD001', '08EF006', '08TH002', '08LO002', '07HP003', '08IK002', '09WF001','09YU001', '05KJ008', '08LK007']
X = pd.DataFrame(X, native_id2, native_id1)

我使用了下面的函数,该函数返回对应于每一行最小值的列或索引的位置。

idx = np.argmin(X.values, axis=1)

返回类似:

array([1, 0, 2, 2, 0, 3, 3, 2, 0, 0], dtype=int64)

我要的是这个:

08CD001    08ME005
08EF006    08MB005
08TH002    08GD006
08LO002    08GD006
07HP003    08MB005
08IK002    08GH002
09WF001    08GH002
09YU001    08GD006
05KJ008    08MB005
08LK007    08MB005

*更新* 我在尝试查找与熊猫数据框的每一行的最小值对应的列名称的过程中找到了该问题的答案。

以下答案有效:

df.idxmin(axis=1)

2 个答案:

答案 0 :(得分:1)

使用DataFrame.idxmindocs):

df.idxmin(axis=1)

等效地,您可以在np.argmin中使用df.apply(np.argmin, axis=1)。但是您会收到以下警告:

  
    

FutureWarning:不建议使用argmin。请改用“ idxmin”。 argmin的行为将得到纠正,以在将来返回位置最小值。使用“ series.values.argmin”立即获取最小值的位置。

  

因此推荐idxmin

答案 1 :(得分:0)

您可以使用它来获取必填列:

def func(x):
    return np.argmin(x)

print(df[["Small", "Int", "Bor", "Drama"]].apply(func, axis=1))