我有一个数据框:
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/