У меня есть 2 больших фрейма данных, которые я ранее обрисовал в этом вопросе Более быстрый метод объединения и фильтрации двух перекрывающихся DataFrame с дополнительной общей переменной .
В качестве продолжения этого вопроса япытался использовать объединение вместо слияния для ускорения операции.Объединение действительно работает намного быстрее, чем объединение, но теперь оно кажется застрявшим в операции .loc, хотя сортируемые кадры данных кажутся почти идентичными, по крайней мере, с точки зрения имен столбцов и размеров df.
Вот пример двух разных подходов, которые я выбрал:
df = pd.merge(df2,df1,how='left',left_on=['CP_ID','Con'], \
right_on=['CP_ID','Con'])
df = df.loc[(df.Timestamp>df.dStart)&(df.Timestamp<df.dEnd)]
и
df2_test = df2.copy()
df1_test = df1.copy()
df11 = df1_test.set_index(['CP_ID','Con'])
df22 = df2_test.set_index(['CP_ID','Con'])
df_test2 = df22.join(df11, how='left')
df_test2.reset_index(inplace=True)
df_test2 = df_test2.loc[(df_test2.Timestamp>df_test2.dStart)&(df_test2.Timestamp<df_test2.dEnd)]
Я вижу трехкратное улучшение скорости в операции объединения / объединения, но в 10 раз замедляется работа .loc, если я использую соединение вместо слияния, что, по сути, сводит на нет все выгоды в целом.Кто-нибудь может объяснить это?Я вручную проверил кадры данных после объединения / слияния, и я не могу сказать, какая разница, которая может вызвать это огромное замедление в .loc