У меня есть один столбец для сравнения с другими 100 столбцами. Все столбцы, которые мне нужно сравнить, это DATETIME. Постановка проблемы следующая:
Я прикрепил пример изображения ниже для справки.
Например: Поскольку UTIL_DATE «31-12-2021» больше, чем «23-09-2021», мы меняем значение строки в столбце «Col3» на 1. Так как в Col1, Col2 (и так далее) есть NaT, то конкретные нельзя сравнивать с UTIL_DATE. Следовательно, 0.
И то же самое повторяется для всех остальных строк
В НАСТОЯЩЕЕ ВРЕМЯ
ОЖИДАЛ
Я пробовал цикл try-except. Однако это занимает более 1 часа 30 минут. Мне нужно улучшить производительность.
Прикрепил фрагмент кода для справки:
for idx, row in df.iterrows(): # row is each row in df and idx is the index for each row
for i in format_cols: # format_cols is the list of columns to be compared with the UTIL_DATE column
ifor_val = 0 # taking ifor_val as 0 by default
try:
if (pd.to_datetime(row["Util_Date"]) >= pd.to_datetime(row[i])):
ifor_val = 1 # if Util_Date >= column "i" date, then map it to 1. Else 0
except:
ifor_val = 0
df.loc[idx,i]=ifor_val
можешь попробовать это:
df=df.set_index('UTIL_DATE')
df=df.ge(df.index, axis=0)
df=df.replace({True:1,False:0})
добавьте воспроизводимый пример: запустите
df.to_dict()
и прикрепите сюда вывод, чтобы другие пользователи могли воспроизвести ваш Dataframe.