加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在Pandas DataFrame中查找所有最大索引

发布时间:2020-12-16 23:53:05 所属栏目:Python 来源:网络整理
导读:我需要找到所有索引,其中在Pandas DataFrame中获得最大值(每行).例如,如果我有这样的dataFrame: cat1 cat2 cat30 0 2 21 3 0 12 1 1 0 那么我正在寻找的方法会产生如下结果: [['cat2','cat3'],['cat1'],['cat1','cat2']] 这是一个列表列表,但其他一些数据

我需要找到所有索引,其中在Pandas DataFrame中获得最大值(每行).例如,如果我有这样的dataFrame:

   cat1  cat2  cat3
0     0     2     2
1     3     0     1
2     1     1     0

那么我正在寻找的方法会产生如下结果:

[['cat2','cat3'],['cat1'],['cat1','cat2']]

这是一个列表列表,但其他一些数据结构也没问题.

我不能使用df.idxmax(axis = 1),因为它只产生第一个最大值.

最佳答案
以下是不同数据结构中的信息:

In [8]: df = pd.DataFrame({'cat1':[0,3,1],'cat2':[2,'cat3':[2,1,0]})

In [9]: df
Out[9]: 
   cat1  cat2  cat3
0     0     2     2
1     3     0     1
2     1     1     0

[3 rows x 3 columns]

In [10]: rowmax = df.max(axis=1)

最大值由True值表示:

In [82]: df.values == rowmax[:,None]
Out[82]: 
array([[False,True,True],[ True,False,False],False]],dtype=bool)

np.where返回上面的DataFrame为True的索引.

In [84]: np.where(df.values == rowmax[:,None])
Out[84]: (array([0,2,2]),array([1,1]))

第一个数组表示轴= 0的索引值,第二个数组表示轴= 1.每个数组中有5个值,因为有五个位置为True.

您可以使用itertools.groupby来构建您发布的列表列表,但考虑到上面的数据结构,您可能不需要这样做:

In [46]: import itertools as IT

In [47]: import operator

In [48]: idx = np.where(df.values == rowmax[:,None])

In [49]: groups = IT.groupby(zip(*idx),key=operator.itemgetter(0))

In [50]: [[df.columns[j] for i,j in grp] for k,grp in groups]
Out[50]: [['cat1','cat1'],['cat2'],['cat3','cat3']]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读