Как значения в ячейках поменять местами
Работаю на python в Jupyter notebook. Появилась задача в двух столбцах датафрейма поменять значения местами при соответствии условию joined_at > paid_at. Иными словами, в joined_at указана дата регистрации, а в paid_at - оплаты. В данных есть ошибка - когда дата оплаты раньше (иногда сильно раньше) даты регистрации.
import pandas as pd
import numpy as np
data = {'uid': ['123','423','1651', '558', '559',
'568','15', '1562', '143','600'],
'joined_at': ['2017-08-11 18:39:00','2017-10-16 01:45:00','2017-10-31 14:16:00','2017-10-31 14:16:00','2017-10-31 14:16:00','2017-07-11 07:02:00','2017-10-29 05:42:00','2017-10-23 19:59:00', '2017-10-21 00:10:00',
'2017-06-11 04:34:00'],
'paid_at': ['2017-10-11 11:29:00','2017-10-16 01:49:00','2017-09-11 15:44:00','2017-04-11 06:46:00', '2017-10-31 16:07:00','2017-11-14 09:16:00',
'2017-06-11 23:11:00','2017-10-23 20:11:00', '2017-10-28 02:10:00', '2017-07-11 21:25:00']
}
df = pd.DataFrame(data, columns = ['uid','joined_at', 'paid_at'])
df['joined_at'] = pd.to_datetime(df['joined_at'])
df['paid_at'] = pd.to_datetime(df['paid_at'])
df['diff_date'] = df.paid_at - df.joined_at
Как я могу поменять эти данные?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Именно с датами не проверял, только с числами, но вроде так должно сработать:
df_tmp = df[['joined_at','paid_at']]
df['joined_at'], df['paid_at'] = df_tmp.min(axis=1), df_tmp.max(axis=1)
Только нельзя разносить присваивания на отдельные строки (либо нужно делать тогда ещё временные переменные). Вычисления min и max должны выполниться обязательно до присваивания значений обратно в датафрейм, как у меня тут и сделано.
