Код: Выделить всё
df = pl.DataFrame({'grp':['a','a','a','b','b','b'], 'val':[1,2,3,10,20,30], 'etc':[0,1,2,3,4,5]})
grp val etc
str i64 i64
"a" 1 0
"a" 2 1
"a" 3 2
"b" 10 3
"b" 20 4
"b" 30 5
df.top_k(2, by='val')
grp val etc
str i64 i64
"b" 30 5
"b" 20 4
Код: Выделить всё
df.groupby('grp').top_k(2, by='val') # doesnt work in polars
grp val etc
str i64 i64
"b" 30 5
"b" 20 4
"a" 3 2
"a" 2 1
Код: Выделить всё
# works, but at expense of using map_groups method
df.group_by('grp').map_groups(lambda df: df.top_k(2, by='val'))
grp val etc
str i64 i64
"b" 30 5
"b" 20 4
"a" 3 2
"a" 2 1
Код: Выделить всё
# works, but at expense of sorting entire groups
df.group_by('grp').agg(pl.all().sort_by('val', descending=True).head(2)).explode('val','etc')
grp val etc
str i64 i64
"a" 3 2
"a" 2 1
"b" 30 5
"b" 20 4
- , который не работает в полярах.
Код: Выделить всё
df.group_by('grp').top_k(2, by='val') - , который работает за счет использования карт_групп
Код: Выделить всё
df.group_by('grp').map_groups(lambda df: df.top_k(2, by='val')) - , который работает за счет сортировки
Код: Выделить всё
df.group_by('grp').agg(pl.all().sort_by('val', descending=True).head(2)).explode('val','etc')
Подробнее здесь: https://stackoverflow.com/questions/765 ... each-group