我得到如下列表:
cat score name
a 80 fa
c 88 lu
b 36 li
b 96 liu
d 99 zc
b 76 mi
d 89 lu
a 50 fa
d 69 zhang
b 36 huang
d 59 guan
b 96 ka
b 86 chao
c 98 le
a 50 mi
a 90 zc
c 83 chao
b 66 guan
如何使用pandas可以获得每只猫的最多3分行?显示所有三行
答案 0 :(得分:4)
print (df.groupby('cat')['score'].nlargest(3))
cat
a 15 90
0 80
7 50
b 3 96
11 96
12 86
c 13 98
1 88
16 83
d 4 99
6 89
8 69
Name: score, dtype: int64
如果需要reset_index
并删除level=1
的{{1}}:
Multiindex
通过评论编辑:
来自df1 = df.groupby('cat')['score']
.nlargest(3)
.reset_index(level=1, drop=True)
.reset_index()
print (df1)
cat score
0 a 90
1 a 80
2 a 50
3 b 96
4 b 96
5 b 86
6 c 98
7 c 88
8 c 83
9 d 99
10 d 89
11 d 69
列的groupby
set_index
之前:
name
评论1的EDIT1:
如果df1 = df.set_index('name').groupby('cat')['score'].nlargest(3).reset_index()
print (df1)
cat name score
0 a zc 90
1 a fa 80
2 a fa 50
3 b liu 96
4 b ka 96
5 b chao 86
6 c le 98
7 c lu 88
8 c chao 83
9 d zc 99
10 d lu 89
11 d zhang 69
列设置为score
,请尝试将参数0
添加到name='score'
reset_index()
另一个解决方案是df1 = df.set_index('name').groupby('cat')['score'].nlargest(3).reset_index(name='score')
:
rename
如果有多列将其添加到df1 = df.set_index('name')
.groupby('cat')['score']
.nlargest(3)
.reset_index()
.rename(columns={'0':'score'})
:
set_index