简体   繁体   English

在数据框的每一列中找到3个最大值,并获取索引号python

[英]find 3 largest values in every column in data frame and get the index number python

I have data frame like this 我有这样的数据框

        A         B         C         D    
0  0.037949  0.021150  0.127416  0.040137  
1  0.025174  0.007935  0.011774  0.003491  
2  0.022339  0.019022  0.024849  0.018062  
3  0.017205  0.051902  0.033246  0.018605  
4  0.044075  0.044006  0.065896  0.021264

And I want to get the data frame with the index values of 3 largest values in each columns. 我想获得每列中索引值为3个最大值的数据框。 Desired output 所需的输出

       A         B         C         D    
0      4         3         0         0
1      0         4         4         4
2      1         0         3         3

You can argsort via NumPy, then slice: 您可以通过NumPy进行argsort ,然后切片:

res = pd.DataFrame(df.values.argsort(0), columns=df.columns)\
        .iloc[len(df.index): -4: -1]

print(res)

   A  B  C  D
4  4  3  0  0
3  0  4  4  4
2  1  0  3  3

Something like this should work: 这样的事情应该起作用:

You can use nlargest function to get Top 3 values. 您可以使用nlargest函数获取前3值。

In [1979]: result = pd.DataFrame([df[i].nlargest(3).index.tolist() for i in df.columns]).T

In [1974]: result
Out[1974]: 
   A  B  C  D
0  4  3  0  0
1  0  4  4  4
2  1  0  3  3

Given 特定

>>> df
          A         B         C         D
0  0.037949  0.021150  0.127416  0.040137
1  0.025174  0.007935  0.011774  0.003491
2  0.022339  0.019022  0.024849  0.018062
3  0.017205  0.051902  0.033246  0.018605
4  0.044075  0.044006  0.065896  0.021264

you can use DataFrame.apply in combination with Series.nlargest : 您可以将DataFrame.applySeries.nlargest结合使用:

>>> df.apply(lambda s: pd.Series(s.nlargest(3).index))
   A  B  C  D
0  4  3  0  0
1  0  4  4  4
2  1  0  3  3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM