在python数据表中按组查询前 N 行的正确方法是什么?
例如,要按组获取具有最大值v3
的前 2 行,id2, id4
我将按以下方式执行 pandas 表达式:
df.sort_values('v3', ascending=False).groupby(['id2','id4']).head(2)
在 R 中使用data.table
:
DT[order(-v3), head(v3, 2L), by=.(id2, id4)]
或在 R 中使用dplyr
:
DF %>% arrange(desc(v3)) %>% group_by(id2, id4) %>% filter(row_number() <= 2L)
使用 pandas 的示例数据和预期输出:
import datatable as dt
dt = dt.Frame(id2=[1, 2, 1, 2, 1, 2], id4=[1, 1, 1, 1, 1, 1], v3=[1, 3, 2, 3, 3, 3])
df = dt.to_pandas()
df.sort_values('v3', ascending=False).groupby(['id2','id4']).head(2)
# id2 id4 v3
#1 2 1 3
#3 2 1 3
#4 1 1 3
#2 1 1 2