Pandas "mask" 减慢 PowerBI 查询速度?

Pandas "mask" slows down PowerBI Query?

我正在使用 Python/pandas 作为数据源来加载和操作来自 Excel sheet 的数据帧。 我正在根据列 'Product'.

中的值创建列 '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')

检查列 'Product' 中的条目是否包含 'C3' 或 'C4',然后相应地填充 'RollProd'。

速度很快,但在添加更多产品后(我需要的不仅仅是 true/false 结果)我决定使用遮罩:

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 查询时,它需要几个小时才能加载。 有没有比掩码更好的方法,还是我的代码效率低下?

尝试使用 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')