簡體   English   中英

使用python數據表按組排列前N行

[英]Top N rows by group using python datatable

python數據表中按組查詢前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)

使用熊貓的示例數據和預期輸出:

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 行,同樣在每個組內;
  • 第二個:選擇所有列。 如果需要,這可能是一個列或表達式的列表,允許您對每組的前 2 行執行一些操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM