Pydatatable перечисляет строки в каждой группе - PullRequest
1 голос
/ 16 июня 2020

Учитывая следующую таблицу данных

DT = dt.Frame({'A':['A','A','A','B','B','B'],
               'B':['a','a','b','a','a','a'],
               })

, я хотел бы создать столбец 'C', в котором нумеруются строки в каждой группе в столбцах A и B следующим образом:

     A   B   C
 0   A   a   1
 1   A   a   2
 2   A   b   1
 3   B   a   1
 4   B   a   2
 5   B   a   3

Согласно этот поток для pandas cumcount () или rank () будет опциями, но, похоже, он не определен для pydatatable:

DT = DT[:, f[:].extend({'C': cumcount()}),by(f.A,f.B)]
DT = DT[:, f[:].extend({'C': rank(f.B)}),by(f.A,f.B)]

a) Как я могу пронумеровать строки в группах?

б) Есть ли исчерпывающий ресурс со всеми доступными в настоящее время функциями для pydatatable?

1 Ответ

2 голосов
/ 25 июня 2020
• 1000 * Шаг 1: Получить количество столбцов A и B и экспортировать в список
result = DT[:, dt.count(), by("A","B")][:,'count'].to_list()

Шаг 2: Используйте комбинацию цепочки itertools и list comprehension, чтобы получить совокупное количество:

from itertools import chain

cumcount = chain.from_iterable([i+1 for i in range(n)] for n in result[0])

Шаг 3: присвоить результат обратно DT

DT['C'] = dt.Frame(tuple(cumcount))

print(DT)


    A       B   C
   ▪▪▪▪   ▪▪▪▪  ▪▪▪▪
0   A      a    1
1   A      a    2
2   A      b    1
3   B      a    1
4   B      a    2
5   B      a    3
6 rows × 3 columns
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...