Dataframe.ixmax на данных времени, подписанных временными знаками
Я извлек некоторые данные о времени даты из моего приложения django:
data = list(MyModel.object.values_list("date1", "date2"))
# >>>
[
(
None,
datetime.datetime(2020, 4, 9, 15, 43, 59, 433515, tzinfo=<UTC>)
),
(
datetime.datetime(2020, 4, 9, 15, 44, 27, 328075, tzinfo=<UTC>),
datetime.datetime(2020, 4, 9, 15, 44, 27, 328075, tzinfo=<UTC>),
)
]
Я ввожу это в датафрейм:
df = pd.DataFrame(data, columns=["date1", "date2"])
и я хочу знать для каждой строки, какой столбец даты является самым высоким, поэтому я использую функцию idxmax на оси=1:
result = df.idxmax(axis=1)
Однако я получаю эту ошибку:
TypeError: reduction operation 'argmax' not allowed for this dtype
Мои типы столбцов - даты, поэтому argmax должен работать с ними.
df.dtypes
# >>>
# date1 datetime64[ns, UTC]
# date2 datetime64[ns, UTC]
# dtype: object
Я что-то упустил?
На самом деле argmax, похоже, не работает с датами, подписанными временными зонами. Если все даты в вашем df находятся в одном часовом поясе, вы можете удалить часовой пояс, и это даст тот же результат:
for col in ["date1", "date2"]:
df[col] = pd.to_datetime(df[col]).dt.tz_localize(None)
df.dtypes
# >>>
# date1 datetime64[ns]
# date2 datetime64[ns]
# dtype: object
df.idxmax(axis=1) # <= this now works