У меня есть фрейм данных (df) с двумя основными столбцами - один называется «TIMESTAMP», представляющий даты, а другой - «Q C», отражающий флаги контроля качества как целые числа. Этот df содержит около 40 000 строк, поэтому я не хочу перебирать каждую из них.
У меня есть новый фрейм данных (dfNew) всего с двумя столбцами из нескольких пар начальной и конечной дат. Я хочу go через мой исходный df и для всех строк, где TIMESTAMP находится между любой из пар дат начала и окончания, перечисленных в dfNew, я хочу заменить значение Q C на -1. Этот dfNew имеет около 400 строк, поэтому я решил, что итерация здесь будет не такой уж плохой.
df выглядит примерно так:
TIMESTAMP | QC
2019-05-04 00:22 5
2019-05-04 00:24 1
2019-05-09 03:30 3
dfNew выглядит примерно так:
START | END
20190504_0023 20190504_0024
Итак, я бы хотел заменить QC = 1 для второй строки в df на QC = -1.
Это мой код:
for index, row in dfNew.iterrows():
df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP'])
start = datetime.datetime.strptime(row[0], "%Y%m%d_%H%M")
end = datetime.datetime.strptime(row[1], "%Y%m%d_%H%M")
masked = (df['TIMESTAMP'] >= start) & (df['TIMESTAMP'] <= end)
df['QC'].mask(masked, -1)
Однако для почему-то маска не работает. Никакие значения не заменяются на -1. Я думаю, что это может быть связано с тем фактом, что я создаю маску, используя столбец TIMESTAMP, но пытаюсь использовать эту маску для замены значений в столбцах Q C, но я не могу понять, что это такое. Приветствуются любые мысли!