我有一个字典,如下所示:
MyDict = {
'Type': 'D',
'Tariff': 'T2',
'Profile' : 1,
'QuoteType' : 'Firm'
}
编辑: 为您提供可以在df中转换以重现的字典:
dictdf = [{'Criteria1': '', 'Criteria2': ''},
{'Criteria1': '', 'Criteria2': ''},
{'Criteria1': "@Tariff in ['T4', 'T5']", 'Criteria2': "@QuoteType == 'Quote'"},
{'Criteria1': "@Tariff in ['T1', 'T2', 'T3']", 'Criteria2': "@QuoteType == 'Quote'"},
{'Criteria1': "@Type == 'D' and @Profile not in [1, 2]", 'Criteria2': "@QuoteType == 'Quote'"},
{'Criteria1': "@Type == 'D'", 'Criteria2': "@QuoteType == 'Quote'"},
{'Criteria1': "@Tariff in ['T1', 'T2', 'T3']", 'Criteria2': "@QuoteType == 'Quote'"},
{'Criteria1': "@Tariff == 'T4'", 'Criteria2' : ''},
{'Criteria1': "@Tariff == 'T5'", 'Criteria2': ''},
{'Criteria1': "@Tariff in ['T1', 'T2', 'T3']", 'Criteria2': ''}
]
pd.DataFrame(dictdf)
我的目标是首先用字典中的相应值替换@xxx。然后,我想评估条件
因此,使用我提供的字典,我期望df[2, 'Criteria1'] = ('D' == 'D')
(已用dict中的@Type替换了@Type),然后在评估时得到True
对于下一个[3,'Criteria1'],我想要'T2' in ['T4', 'T5']
(已替换
@Tariff的值在MyDict中的值),结果为False
df[3, 'Criteria1'] = eval ('T2' in ['T4','T5']) = False
等
我找到了panda替换,但是我对regex不太放心,我不确定应该如何评估所有行的值。我可以使用pd.apply来做到这一点,但我已经读过很多次,这是要尽可能地禁止它,因此我开始寻求一种优化的方法?
最有效地评估这些标准对我的需求至关重要,因为这是我的python脚本将执行的最重要的过程
完成此操作后,我将遇到相同的问题,但请想象我在一开始有一个Empy MyDict。我遍历df中的每一行时都会创建它。例如,如果我仅在知道Type的值之后才知道Tariff的值,那该怎么办?假设我在提供的df中的第1行上知道该值?是否必须使用for循环?