使用 python 数据表分组的前 N 行
Top N rows by group using python datatable
在 python datatable 中按组查询前 N 行的正确方法是什么?
例如,要按 id2, id4
组获得具有最大 v3
值的前 2 行,我将按以下方式执行 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
从datatable
版本0.8.0开始,可以通过组合分组、排序和过滤来实现:
from datatable import *
DT = Frame(id2=[1, 2, 1, 2, 1, 2],
id4=[1, 1, 1, 1, 1, 1],
v3=[1, 3, 2, 3, 3, 3])
DT[:2, :, by(f.id2, f.id4), sort(-f.v3)]
产生
id2 id4 v3
--- --- --- --
0 1 1 3
1 1 1 2
2 2 1 3
3 2 1 3
[4 rows x 3 columns]
解释:
by(f.id2, f.id4)
按 "id2" 和 "id4" 列对数据进行分组;
sort(-f.v3)
命令告诉 datatable
按列 "v3" 降序排列记录。在存在 by()
的情况下,此运算符将应用于每个组;
- 第一个
:2
选择前 2 行,同样在每个组内;
- 第二个
:
选择所有列。如果需要,这可能是列或表达式的列表,允许您对每个组的前两行执行一些操作。
在 python datatable 中按组查询前 N 行的正确方法是什么?
例如,要按 id2, id4
组获得具有最大 v3
值的前 2 行,我将按以下方式执行 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
从datatable
版本0.8.0开始,可以通过组合分组、排序和过滤来实现:
from datatable import *
DT = Frame(id2=[1, 2, 1, 2, 1, 2],
id4=[1, 1, 1, 1, 1, 1],
v3=[1, 3, 2, 3, 3, 3])
DT[:2, :, by(f.id2, f.id4), sort(-f.v3)]
产生
id2 id4 v3
--- --- --- --
0 1 1 3
1 1 1 2
2 2 1 3
3 2 1 3
[4 rows x 3 columns]
解释:
by(f.id2, f.id4)
按 "id2" 和 "id4" 列对数据进行分组;sort(-f.v3)
命令告诉datatable
按列 "v3" 降序排列记录。在存在by()
的情况下,此运算符将应用于每个组;- 第一个
:2
选择前 2 行,同样在每个组内; - 第二个
:
选择所有列。如果需要,这可能是列或表达式的列表,允许您对每个组的前两行执行一些操作。