使用python数据表按组排列的前N行
在中按组查询前N行的正确方法是什么?使用python数据表按组排列的前N行,python,r,py-datatable,Python,R,Py Datatable,在中按组查询前N行的正确方法是什么? 例如,要通过id2、id4groupi获得具有最大v3值的前2行,请按以下方式执行表达式: df.sort_values('v3', ascending=False).groupby(['id2','id4']).head(2) 在R中使用数据。表: DT[order(-v3), head(v3, 2L), by=.(id2, id4)] 或在R中使用dplyr DF %>% arrange(desc(v3)) %>% group_by(id
例如,要通过
id2、id4
groupi获得具有最大v3
值的前2行,请按以下方式执行表达式:
df.sort_values('v3', ascending=False).groupby(['id2','id4']).head(2)
在R中使用数据。表:
DT[order(-v3), head(v3, 2L), by=.(id2, id4)]
或在R中使用dplyr
DF %>% arrange(desc(v3)) %>% group_by(id2, id4) %>% filter(row_number() <= 2L)
从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行李>
- 第二个
:
选择所有列。如果需要,这可能是列或表达式的列表,允许您对每个组的前2行执行一些操作
您的示例代码有什么问题?您的意思是DataFrame
?@Dan没有什么不对的,只是它不会扩展,所以我的问题是datatable解决方案。我的意思是datatable
而不是DataFrame
,添加了有问题的链接,因此更清晰。
id2 id4 v3
--- --- --- --
0 1 1 3
1 1 1 2
2 2 1 3
3 2 1 3
[4 rows x 3 columns]