Сделайте часть кода эффективной для больших данных - PullRequest
0 голосов
/ 12 июля 2020

У меня есть следующий код:

new_df = pd.DataFrame(columns=df.columns)
for i in list:
    temp = df[df["customer id"]==i]
    new_df = new_df.append(temp)

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

Я считаю, что умею кодировать, но никогда не учился кодировать для повышения эффективности больших данных. В этом случае df содержит около 3 миллионов строк, а list содержит около 100 000 элементов. Этот код работал более 24 часов и все еще не был выполнен, поэтому мне нужно спросить, что я делаю ужасно неправильно? Есть ли способ сделать этот код более эффективным?

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вы можете попробовать следующий код, который должен ускорить работу.

new_df = df.loc[df['customer id'].isin(list)]
1 голос
/ 12 июля 2020

list - это тип Python. Вам следует избегать именования переменных со встроенными типами или функциями. Я смоделировал проблему с 3 миллионами строк и списком идентификаторов клиентов размером 100000. Использование isin заняло всего несколько секунд.

new_df = df[ df['customer id'].isin(customer_list) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...