熊猫的“蒙版”减慢了PowerBI查询的速度?

时间:2019-04-30 18:45:41

标签: python pandas powerbi-desktop

我正在使用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”。

这很快,但是在添加了更多产品之后(我需要的不只是一个正确/错误的结果),我决定使用蒙版:

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 个答案:

答案 0 :(得分:1)

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