Pandas数据框选择具有指定列中最高值的整个行

时间:2017-09-21 18:03:49

标签: python pandas

我有一个数据框,我想返回包含指定列中最大值的完整行。所以,我要说我创建了一个这样的数据框:

df = pd.DataFrame(np.random.randint(0,100,size=(25, 4)), columns=list('ABCD'))

然后我会有一张这样的桌子(对不起,我无法找到合适的桌子,所以我只做了一个简短的桌子):

A    B    C    D
14   67   35   22
75   21   34   64

让我们说它继续这样的25行。我想取C列的前5个最大值并返回那些完整的行。

如果我这样做:

df['C'].nlargest()

它返回那5个最大的值,但我希望它返回完整的行。

我认为下面的内容会有效,但它会给我一个"错误的错误:索引超出范围":

df[df['C'].nlargest()]

我知道这对很多人来说都是一个简单的解决方案,但它让我很难过。谢谢你的帮助。

4 个答案:

答案 0 :(得分:5)

您想使用columns参数:

In [53]: df.nlargest(5, columns=['C'])
Out[53]:
     A   B   C   D
17  43  91  95  32
18  13  36  81  56
7   61  90  76  85
16  68  21  73  68
14   3  64  71  59

答案 1 :(得分:4)

方法#1 一种方法 -

df.iloc[df.C.argsort()[::-1][:5]]

通过简化切片,减少到 -

df.iloc[df.C.argsort()[:-6:-1]]

方法#2 为了提高性能,如果这些最大n行的顺序不重要,我们也可以使用np.argpartition -

df.iloc[df.C.values.argpartition(-5)[:-6:-1]]

答案 2 :(得分:3)

不使用<sch:pattern id="too-many-following-siblings"> <sch:rule context="p"> <sch:report test="count(following-sibling::p) lt 2"> Less than 2 following-sibling &lt;p&gt; elements. </sch:report> </sch:rule> </sch:pattern> ,使用nlargest

sort_values

或使用df.sort_values('C',ascending=False).iloc[:5,]

head

或使用df.sort_values('C',ascending=False).head(5)

quantile

答案 3 :(得分:1)

快速而肮脏

df.where(df.C.nlargest()).dropna()

       A     B     C     D
7   98.0  52.0  93.0  65.0
13  76.0  20.0  86.0  68.0
16  83.0   6.0  92.0  51.0
22  97.0  15.0  84.0   8.0
24  32.0  80.0  87.0  34.0