Сортировка фрейма данных Dask с двумя полями

#python #python-3.x #pandas #dask

Вопрос:

В этом примере я пытаюсь отсортировать фрейм данных Dask с помощью двух столбцов balance и year извлечь его из date поля. Я пытаюсь объединить в новое поле баланс в виде строки с годом в виде строки, но получаю ошибку:

 pdf = pd.DataFrame({
    'id': [1, 1, 1, 2, 2],
    'balance': [350, 340, 130, 280, 260],
    'date' : [datetime(2021,3,1), datetime(2021,2,7), datetime(2021,7,1),
              datetime(2021,2,6), datetime(2021,3,18)]
})

ddf = dd.from_pandas(pdf, npartitions=100) 

ddf['newIndex'] = str(ddf['balance'])   (ddf['date']).year   # <-- this throws the error

ddf = ddf.set_index(['newIndex'])
 

Ошибка, которую я получаю, это:

Ошибка атрибута: объект «Серия» не имеет атрибута «год»

Поле даты-это серия, я понимаю, но как извлечь год из даты и объединить баланс для сортировки по этому новому полю?

Ответ №1:

Небольшая настройка сделает эту работу:

 ddf['newIndex'] = ddf['balance'].astype('str')  ddf['date'].dt.year.astype('str')
 

Обратите внимание, что основная ошибка заключалась в отсутствии .dt метода, и позже вам понадобятся оба столбца, str чтобы добавить их.

Однако с точки зрения того, чего вы пытаетесь достичь, возможно, было бы лучше сначала разделить данные по годам, а затем выполнить сортировку внутри разделов. Это, конечно, зависит от специфики ваших данных.