【问题标题】:Finding the column names of a pandas DataFrame where row values are minimum查找行值最小的 pandas DataFrame 的列名
【发布时间】:2019-03-01 02:35:34
【问题描述】:

我有一个如下的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)

【问题讨论】:

  • df.columns[idx]
  • 如果你真的想清楚,你应该提供一个minimal reproducible example
  • df.idxmin(axis=1) 将为您提供所有列名
  • 顺便说一句 (X.idxmin(1) == X.columns[X.values.argmin(1)]).all() 评估为 True
  • 很明显,您甚至从未尝试过我提供的代码。如果你有,你会注意到它给出了每行中最小值的列名......正是你所要求的。现在我没有从这次互动中失去或获得任何东西,但我担心你会因为不理解对你非常有用的东西而离开。

标签: python pandas numpy


【解决方案1】:

使用DataFrame.idxmin (docs):

df.idxmin(axis=1)

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

FutureWarning:不推荐使用“argmin”。请改用“idxmin”。 'argmin' 的行为将被纠正以在将来返回位置最小值。现在使用 'series.values.argmin' 获取最小值的位置。

所以推荐idxmin

【讨论】:

    【解决方案2】:

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

    def func(x):
        return np.argmin(x)
    
    print(df[["Small", "Int", "Bor", "Drama"]].apply(func, axis=1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2020-06-20
      相关资源
      最近更新 更多