Почему быстрее, чем ваниль df.apply? - PullRequest
0 голосов
/ 09 октября 2019

У меня есть датафрейм с 1 миллионом строк. У меня есть одна функция (которую я не могу векторизовать), чтобы применить к каждой строке. Я посмотрел на swifter, который обещает использовать несколько процессов для ускорения вычислений. Однако на 8-ядерном компьютере это не так.

Есть идеи почему?

def parse_row(n_print=None):
    def f(row):
        if n_print is not None and row.name % n_print == 0:
            print(row.name, end="\r")
        return Feature(
            geometry=Point((float(row["longitude"]), float(row["latitude"]))),
            properties={
                "water_level": float(row["water_level"]),
                "return_period": float(row["return_period"])
            }
        )
    return f

In [12]: df["feature"] = df.swifter.apply(parse_row(), axis=1)
Dask Apply: 100%|████████████████████████████████████████| 48/48 [01:19<00:00,  1.65s/it]

In [13]: t = time(); df["feature"] = df.apply(parse_row(), axis=1); print(int(time() - t))
46
...