Операция столбца фрейма данных Koalas - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть фрейм данных коалы с ок. 6 миллионов строк в нем. Мне нужно выполнить операцию, в которой я читаю каждую строку во фрейме данных, извлекаю значения каждой строки и затем выполняю поиск в списке (этот список содержит 30 K элементов). Если найдено, верните true, иначе false, и создайте логический массив в качестве вывода.

Я знаю один простой способ сделать это - выполнить итерацию по каждой строке с помощью метода iterrows (). Но это отнимает много времени. Ищите рекомендации, которые могут ускорить процесс.

Например, пример фрейма данных -

        species     population
panda     bear          1864
polar     bear          22000
koala     marsupial     80000

Теперь у меня есть список, в котором есть комбинация значений из моего столбца, Get значения каждой строки, например (медвежонок, 1864), если они найдены в тестовом списке, добавляют к списку true, если не false

test_list =[(bear,189), (bear,1864) , (marsupial,9), ..... ]

длина test_list составляет приблизительно 30k

Пример вывода будет

output = [True, False, False]

проверяется каждая отдельная строка выборочного фрейма данных, первая строка имеет значения (медвежий, 1864), поэтому в списке вывода в качестве первого элемента указан true. Второй ряд имеет значения (медведь, 1864), которых нет в списке. Следовательно, False добавляется в список вывода и т. Д.

1 Ответ

0 голосов
/ 28 февраля 2020

Я довольно новый, но дам ему go. Тем не менее, pandas не любит работать со списками и итерациями, это очень дорого.

С размерами данных, о которых вы говорите, я бы просто превратил test_list в отдельный фрейм данных, а затем сравнил их:

import pandas a pd

# create DataFrame using test_list
test_df = pd.DataFrame(test_list)
print(test_df)

           0     1
0       bear   189
1       bear  1864
2  marsupial     9
df['test'] = (
    (df.iloc[:, 0].isin(test_df.iloc[:, 0])) &
    (df.iloc[:, 1].isin(test_df.iloc[:, 1]))
)
print(df)

         species  population   test
panda       bear        1864   True
polar       bear       22000  False
koala  marsupial       80000  False

Так как Ваши наборы данных настолько велики, что это должно быть быстрее, чем перебирать список с .apply() или чем-то подобным. Как правило, попробуйте создать массив DataFrame, Series или numpy из списка списков или кортежей. Оттуда все довольно просто.

Надеюсь, это поможет.

...