我试图重做我的代码并使其向量化。
我想使用panda.query中使用的相同功能来替换字符串,然后用变量替换@。
我尝试研究panda.query源代码,但是找不到找到该函数并利用相同逻辑的方法。
如果您有一些详细信息,或者可以指导我确定转换的位置,那会有所帮助吗?
在我的示例中,我有一个这样的字符串数组:
PricingArray = np.array([
"@Tariff == 'T2'",
"@Tariff in ['T1','T2','T5']",
"@Tariff == 'T1' and @CustomerType == 'Tier1'"
])
我也有这样的数组:
TariffArray = np.array(['T2', 'T2', 'T2', 'T2', 'T3', 'T3'], dtype=object)
CustomerTypeArray == np.array(['Tier1', 'Tier2', 'Tier2', 'Tier3', 'VIP', 'B2C'], dtype=object)
我的数组TariffArray和CustomerTypeArrays的维数相同,可以成千上万。
现在我有一个像这样的字典
MyDict = {'Tariff' : TariffArray, 'CustomerType' : CustomerTypeArray}
我想遍历PricingArray,用MyDict中等效的变量替换@前面的每个单词,并在np.nonzero(Condition)中使用整个字符串
我该怎么做?
我尝试执行以下操作,但不幸的是,它不起作用
如果我估算ComputeString的返回值也不起作用
我想按索引将结果数组添加到字典中
def ComputeString(String):
return re.sub("@(\w+)", lambda m : str(MyDict[m.group(1)]),
String)
Output = {}
for i, Criteria in enumerate(PricingArray):
Output[i] = np.nonzero(ComputeString(Criteria, MyDict))
奖金问题:我还应该如何删除for循环条件并使用数组函数替换它,在这里也很困难