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


Вернуться на верх