动态地执行Python Numpy评估条件-使用@如pd.query

时间:2019-06-19 14:03:42

标签: python pandas numpy

我试图重做我的代码并使其向量化。

我想使用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循环条件并使用数组函数替换它,在这里也很困难

0 个答案:

没有答案