熊猫df用dict和regex替换列中的值

时间:2019-06-15 22:10:57

标签: python regex pandas dataframe

我有一个字典,如下所示:

MyDict = {
'Type': 'D',
'Tariff': 'T2',
'Profile' : 1,
'QuoteType' : 'Firm'
    }

我有一个看起来像这样的df enter image description here

编辑: 为您提供可以在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循环?

0 个答案:

没有答案