gpt4 book ai didi

python - 使用 python 数据表按组排列的前 N ​​行

转载 作者:太空狗 更新时间:2023-10-30 02:24:21 25 4
gpt4 key购买 nike

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 - 使用 python 数据表按组排列的前 N ​​行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54128229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com