#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, но это расточительно. Есть ли лучшее решение для этого?
Спасибо!