我有一个数据框,我想返回包含指定列中最大值的完整行。所以,我要说我创建了一个这样的数据框:
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()]
我知道这对很多人来说都是一个简单的解决方案,但它让我很难过。谢谢你的帮助。
答案 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 <p> 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