«Маска» панд замедляет PowerBI Query? - PullRequest
0 голосов
/ 30 апреля 2019

Я использую Python / pandas в качестве источника данных для загрузки и управления кадром данных из листа Excel.Я создаю столбец «RollProd» на основе значений в столбце «Продукт».

Рассматриваемые строки, которые так сильно замедляют мой запрос, были ранее:

colsearch = ['FC4', 'NC4', 'IC4', 'RGB']
finaldf['RollProd'] = np.where(finaldf['Product'].str.contains(r'\b(?:{})\b'.format('|'.join(colsearch)), case=False, na=False), 'C4', 'C3')

, чтопроверяет, содержат ли записи в столбце «Продукт» «C3» или «C4», а затем соответственно заполняет «RollProd».

Это было быстро, но после добавления большего количества продуктов (мне нужно было больше, чемtrue / false result) Я решил использовать маски:

mask_0 =((finaldf['Product'].str.contains('C4', case=False, na=False)) | (finaldf['Product'].str.contains('RGB', case=False, na=False)))
mask_1 = (finaldf['Product'].str.contains('CON', case=False, na=False))
mask_2 = (finaldf['Product'].str.contains('C3', case=False, na=False))
mask_3 = (finaldf['Product'].str.contains('MIX', case=False, na=False))
finaldf.loc[mask_0, 'RollProd'] = 'C4'
finaldf.loc[mask_1, 'RollProd'] = 'C5+'
finaldf.loc[mask_2, 'RollProd'] = 'C3'
finaldf.loc[mask_3, 'RollProd'] = 'MIX'

Это работает так же быстро, когда я запускаю скрипт самостоятельно, но когда я меняю запрос PowerBI, загрузка занимает несколько часов.Есть ли лучший метод, чем маска, или что-то неэффективное с моим кодом?

1 Ответ

1 голос
/ 30 апреля 2019

Попробуйте использовать np.select, который будет работать быстрее, чем .loc четыре раза. Требуется список условий и соответствующих вариантов.

conditions = [mask_0, mask_1, mask_2, mask_3]
choices = ['C4', 'C5+', 'C3', 'MIX']

finaldf['RollProd'] = np.select(conditions, choices, default='unknown')
...