Моя функция в пандах следующая:
Код: Выделить всё
import pandas as pd
import time
import numpy as np
target_value = 0.5
data = np.random.rand(1000,100)
df = pd.DataFrame(data)
run_times = []
for i in range(100):
st = time.perf_counter()
df_filtered = df.loc[(df[0] - target_value).abs() == (df[0] - target_value).abs().min()]
run_time = time.perf_counter() - st
run_times.append(run_time)
print(f"avg pandas run: {sum(run_times)/len(run_times)}")
Код: Выделить всё
import polars as pl
import time
import numpy as np
target_value = 0.5
data = np.random.rand(1000,100)
df = pl.DataFrame(data)
run_times = []
for i in range(100):
st = time.perf_counter()
df = df.with_columns(abs_diff = (pl.col('column_0')-target_value).abs())
df_filtered = df.filter(pl.col('abs_diff') == df['abs_diff'].min())
run_time = time.perf_counter() - st
run_times.append(run_time)
print(f"avg polars run: {sum(run_times)/len(run_times)}")
Одна вещь, которую следует отметить: когда я тестирую его с двумя столбцами, поляры работают быстрее, и чем больше столбцов я добавляю, тем медленнее работают поляры. С другой стороны, поляры начинают превосходить панды примерно после 500_000 строк по сравнению со 100 столбцами.
Кроме того, в моем реальном случае использования мне нужно будет вернуть несколько строк, соответствующих ближайшему значению.
Не уверен, важно ли это, но для дополнительного контекста я запускаю Python на сервере Linux.
Подробнее здесь: https://stackoverflow.com/questions/794 ... equivalent
Мобильная версия