Увеличение скорости цикла for через List и dataframe - PullRequest
0 голосов
/ 15 января 2019

В настоящее время я имею дело с огромным количеством данных в оригинальной форме списка через комбинацию. Я выполняю условия для каждого набора списка через цикл for. Проблема в том, что этот небольшой цикл занимает несколько часов с данными. Я хочу оптимизировать скорость, изменив некоторые функции или векторизовав ее.

Я знаю, что одно из самых больших НЕТ - это не выполняйте операции Pandas или Dataframe для циклов, но мне нужно суммировать столбцы и организовать их немного, чтобы получить то, что я хочу. Это кажется неизбежным.

Итак, у вас есть лучшее понимание, каждый список выглядит примерно так, когда он создается в кадре данных:

0
                 Name     Role  Cost  Value
0      Johnny Tsunami   Driver  1000     39
1  Michael B. Jackson   Pistol  2500     46
2          Bobby Zuko   Pistol  3000     50
3        Greg Ritcher  Lookout   200     25

                 Name     Role  Cost  Value
4      Johnny Tsunami   Driver  1000     39
5  Michael B. Jackson   Pistol  2500     46
6          Bobby Zuko   Pistol  3000     50
7         Appa Derren  Lookout   250     30

Это текущий цикл, есть идеи?

for element in itertools.product(*combine_list):
   combo = list(element)
   df = pd.DataFrame(np.array(combo).reshape(-1,11))
   df[[2,3]] = df[[2,3]].apply(pd.to_numeric)

   if (df[2].sum()) <= 5000 and (df[3].sum()) > 190:
       df2 = pd.concat([df2, df], ignore_index=True)

Пара вещей, которые я сделал, которые отрезаны некоторое время, но не достаточно. *df[2].sum() to df[2].values.sum ---- быстрее

*, где concat находится в операторе if, который я пытался использовать, добавляя, а также добавляя фрейм данных вместе в виде списка ... concat обычно на 2 секунды быстрее, как обычно, или в итоге он будет иметь примерно ту же скорость.

* на .apply(pd.to_numeric) изменил его на .astype(np.int64), это также быстрее.

В настоящее время я также смотрю на PYPY и Cython, но я хочу начать здесь прежде, чем начну испытывать головную боль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...