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中执行此操作?
解决方案set_index,groupby和SeriesGroupBy.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)
如果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)
| 归档时间: |
|
| 查看次数: |
3857 次 |
| 最近记录: |