Как создать столбец частоты пар признаков в dask?

#python #pandas #dask

Вопрос:

У меня есть набор данных с двумя столбцами Dst Порт и протокол, и я хотел бы создать новый столбец, содержащий количество пар частот, чтобы

Порт Dst Протокол
53 5
22 7
53 5
1 1

становится

Порт Dst Протокол Частота
53 5 2
22 7 1
53 5 2
1 1 1

до сих пор у меня есть следующий код

 pair = ['Dst Port', 'Protocol']

# x is a dask series
x['Frequency'] = x.groupby(pair)[pair[0]].transform('count', meta=int)
 

Однако я сталкиваюсь с ValueError: cannot reindex from a duplicate axis

Я предполагаю, что, поскольку нам необходимо вычислить частоты по всему набору данных до добавления столбца, мы не можем воспользоваться параллелизмом dask и должны преобразовать из фрейма данных dask в фрейм данных pandas, добавить столбец, а затем преобразовать обратно в фрейм данных dask. Верно ли это предположение?

Я достиг этого с помощью следующего кода:

 partitions = x.npartitions
x = x.compute()
x[column_name] = x.groupby(pair)[pair[0]].transform('count')
x = dd.from_pandas(x, npartitions=partitions)
 

Однако, когда я пытаюсь разделить свои данные на обучение и тестирование, я сталкиваюсь с ошибкой несовпадения делений между x и y: Mismatched divisions. (0, 4100, 8453, 13037, 17623, 22218, 26834, 31427, 36025, 42208) != (None, None, None, None, None, None, None, None, None, None)

Одним из обходных путей является также преобразование y в pandas и обратно в dask, но это расточительно. Есть ли лучшее решение для этого?

Спасибо!