Python 查找行值最小的数据帧的列名

Python 查找行值最小的数据帧的列名,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据帧,如下所示: 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,

我有一个数据帧,如下所示:

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)

使用
DataFrame.idxmin
():

同样,您可以在
df.apply(np.argmin,axis=1)中使用
np.argmin
。但你会得到这样的警告:

FutureWarning:“argmin”已弃用。改用“idxmin”。“argmin”的行为将被更正,以在将来返回位置最小值。现在使用“series.values.argmin”获取最小值的位置


因此建议使用
idxmin

您可以使用它来获取所需的列:

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

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

df.columns[idx]
如果你真的想清楚,你应该提供一个
df.idxmin(axis=1)
将得到你所有的列名btw
(X.idxmin(1)==X.columns[X.values.argmin(1)]。all()
计算结果为
True
很明显,你甚至从未尝试过我提供的代码。如果有,您会注意到它为每行中的最小值提供了列名。。。正是你要的。现在,我没有从这次互动中失去或获得任何东西,但我担心你会离开,不理解一些可能对你非常有用的东西。
def func(x):
    return np.argmin(x)

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