如何在pandas数据框中保留每组的前3行?

Fey*_*rov 4 python grouping pandas

我有一个如下所示的列表:

var1     var2    count
 A        abc      4
 A        abc      3
 A        abc      2
 A        abc      1
 A        abc      1
 B        abc      7
 B        abc      5
 B        abc      2
 B        abc      1
 B        abc      1
 C        abc      4
 C        abc      3
 C        abc      2
 C        abc      1
 C        abc      1

 ....
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的数据框,其中包含每组的前3个"计数"结果.它应该如下所示:

     var1     var2    count
      A        abc      4
      A        abc      3
      A        abc      2
      B        abc      7
      B        abc      5
      B        abc      2
      C        abc      4
      C        abc      3
      C        abc      2
      ....
Run Code Online (Sandbox Code Playgroud)

有没有一种方便的方法在使用head()在Python中执行此操作?

jez*_*ael 9

解决方案set_index,groupbySeriesGroupBy.nlargest:

df = df.set_index('var2').groupby("var1")['count'].nlargest(3).reset_index()
print (df)
  var1 var2  count
0    A  abc      4
1    A  abc      3
2    A  abc      2
3    B  abc      7
4    B  abc      5
5    B  abc      2
6    C  abc      4
7    C  abc      3
8    C  abc      2
Run Code Online (Sandbox Code Playgroud)


Psi*_*dom 6

如果count列已按降序排列,那么您可以使用groupby.head来获取每个组的前三行:

df.groupby("var1").head(3)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

否则,您可以对数据帧进行分组,var1并使用nlargest来检索前3个计数最高的三行:

df.groupby("var1", group_keys=False).apply(lambda g: g.nlargest(3, "count"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明