Группируйте данные по неделям и получайте минимальные и максимальные даты в течение недели в новом столбце. - PullRequest
0 голосов
/ 17 мая 2019

У меня есть фрейм данных, который включает столбцы "call_date", который является датой вызова и "call_week", который является номером недели (неделя не обязательно начинается в понедельник или воскресенье и не обязательно длится ровно 7 дней):

enter image description here

Что я хочу сделать, так это добавить новый столбец данных, который будет содержать граничные даты недели, разделенные знаком "-". Например, если у нас есть WEEK 68 с минимальным CALL_DATE из 2019-04-25 и максимальным CALL_DATE из 2019-04-30, новый столбец должен содержать значение 2019-04-25 - 2019-04-30.

Я пытался: dfg = df.groupby('WEEK')['CALL_DATE'].agg(['min', 'max']).reset_index()

dfg:

enter image description here

Затем я добавил эти минимальные и максимальные столбцы к df через join:

df = df.join(dfg, lsuffix = 'WEEK', rsuffix = 'WEEK')

Теперь я пытаюсь применить функцию lambda для объединения тех столбцов в один, который содержит результат:

df['WEEK_TEXT'] = df.apply(lambda x : x['min'].strftime("%d.%m.%Y") + ' - ' + x['max'].strftime("%d.%m.%Y"))

Но я получаю ошибку: KeyError: ('min', 'occurred at index CONTACT_ID')

Как мне это исправить?

1 Ответ

1 голос
/ 17 мая 2019

Лучше использовать Series.dt.strftime:

df['WEEK_TEXT'] = df['min'].dt.strftime("%d.%m.%Y") + ' - ' + df['max'].dt.strftime("%d.%m.%Y")

В вашем решении необходимо axis=1 для процессов по строкам:

f = lambda x : x['min'].strftime("%d.%m.%Y") + ' - ' + x['max'].strftime("%d.%m.%Y")
df['WEEK_TEXT'] = df.apply(f, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...