如何选择行中第二小的值并返回它们各自的列名?

2024-04-27 05:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,有很多列,其中有很多整数值。我想返回列的名称,作为行中第二低的值。你知道吗

我可以返回一行中最低值的列名,非常简单:

import pandas as pd

matrix = [(22, 2, 13),
          (9, 1, 5),
          (5, 4, 3),
          (6, 3, 1),
          (1, 2, 20)]

dfObj = pd.DataFrame(matrix, index=list('abcde'), columns=list('xyz'))

minValueIndexObj = dfObj.idxmin(axis=1)
print("min values of row are at following columns :")
print(minValueIndexObj)

Out[]:
min values of row are at following columns :
a    y
b    y
c    z
d    z
e    x
dtype: object

行“a”的列“y”的值最小。你知道吗

我接下来需要的是:

2nd min values of row are at following columns :
a    z
b    z
c    y
d    y
e    y
dtype: object

谢谢你的支持。你知道吗


Tags: columnsofminmatrixareatlistrow
1条回答
网友
1楼 · 发布于 2024-04-27 05:06:36

使用^{}作为按排序值排列的所有列名的数组:

a = dfObj.columns.values[np.argsort(dfObj.values)]
print (a)
[['y' 'z' 'x']
 ['y' 'z' 'x']
 ['z' 'y' 'x']
 ['z' 'y' 'x']
 ['x' 'y' 'z']]

然后通过索引选择'columns',并传递给Series构造函数:

print (pd.Series(a[:, 0], index=dfObj.index))
a    y
b    y
c    z
d    z
e    x
dtype: object

print (pd.Series(a[:, 1], index=dfObj.index))
a    z
b    z
c    y
d    y
e    y
dtype: object

相关问题 更多 >