Я хочу получить раздел данных, соответствующий определенным требованиям.
Я хочу сделать:
new_df = old_df[old_df.timevariable.date() == thisdateiwant]
Есть ли эффективный способ сделать это, который работает?проблема здесь в части .date ().Я сделал это прежде, чем использовать тот же синтаксис, но не с модификатором со стороны old_df.Например, old_df.timevariable - это дата и время, тогда я могу сопоставить это с ==datetime
, но, поскольку я хочу дату, мне нужно изменить каждый элемент в кадре данных, что не нравится синтаксису.
Я знаю, что мог бы взять все это и сделать цикл с кучей переменных, но я уверен, что это будет намного медленнее.Первый фрагмент кода, казалось, был самым быстрым способом сделать это (например, предложение WHERE SQL), хотя, похоже, не работает, если вам нужно изменить сравниваемую переменную (например, .date ()).
Файл old_df имеет размер (900 КБ, 15), поэтому я хочу получить что-то эффективное.В настоящее время я просто меняю переменные и повторно импортирую из SQL, который, кажется, занимает 5-10 секунд для каждой даты (thisdateiwant
).Я предполагаю, что что-то в python с большей исходной базой данных будет быстрее, чем это.Обычно он возвращает около 30 тыс. Строк в new_df для каждой даты.
Какой самый быстрый способ сделать это?
Редактировать
Рад отметить, что это дубликат, я получил работу из некоторого кода в этом другом вопросе (из @Pault).в основном сделал:
mask = old_db['timevariable'] >= thisdateiwant
mask2 = old_db['timevariable'] < thisdateiwant (+1day)
new_db = old_db.loc[mask]
new_db = new_db.loc[mask2]
Я не думаю, что есть простой способ сделать обе маски одновременно, казалось бы, с ошибкой.Это хорошо и быстро, поэтому я счастлив.