Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python数据表按组排列的前N行_Python_R_Py Datatable - Fatal编程技术网

使用python数据表按组排列的前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

在中按组查询前N行的正确方法是什么?
例如,要通过
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]