python - 如何获取pandas数据框中所有最小值的索引?

标签 python pandas dataframe

我有一个数据框:

df = pd.DataFrame({'A': [0, 0, 1], 'B': [1, 0, 0]}, index=['x', 'y', 'z'])

   A  B
x  0  1
y  0  0
z  1  0

对于每一行,我想要具有最低值的所有列的名称(编辑:每行),例如:

x  A
y  A
y  B
z  B

# or 

x  [A]
y  [A, B]
z  [B]

我知道 idxmin() 给出最低值的第一个实例:

df.idxmin(axis=1)

x    A
y    A
z    B

但是获得所有这些的有效方法是什么?

这个question给出特定列中具有最小的所有行,但这并不是我想要的。

编辑:这是一个更好的玩具 df,用于获取每行中具有最小值的列名称:

df2 = pd.DataFrame({'A': [1, 0, 6], 'B': [3, 0, 2]}, index=['x', 'y', 'z'])

   A  B
x  1  3
y  0  0
z  6  2

最佳答案

您可以使用groupby+transform('min') :

s = df.stack()
s[s.eq(s.groupby(level=0).transform('min'))]

输出:

x  A    0
y  A    0
   B    0
z  B    0

替代格式:

s = df.stack()
(s[s.eq(s.groupby(level=0).transform('min'))]
  .reset_index()
  .groupby('level_0')['level_1'].apply(list)
 )

输出:

level_0
x       [A]
y    [A, B]
z       [B]
Name: level_1, dtype: object

关于python - 如何获取pandas数据框中所有最小值的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71041180/

相关文章:

python - 是否有一个 python assert() 方法可以在两个边界之间进行检查?

python - 省略尾部斜杠时静态文件不会加载到 Bottle 应用程序中

python - 根据条件/缺失数据将默认行插入 Pandas Dataframe

python - F.monotonicly_increasing_id() 返回长随机数

r - 如何使用函数在data.table/R 中进行递归计算?

python - scrapy 和 MySQL 的错误处理

python - 嗅探串口数据而不从缓冲区中删除数据

python - Pandas:保存到 csv 时的内存差异(Dataframe 与多索引系列)

python - Pandas Dataframe 将我的字典变成了字符串

dataframe - 如何将pySpark中数据框的所有列与其他单列相乘