Python 如何创建一个规则集,根据搜索的子字符串将值分配给熊猫中的特定列?

Python 如何创建一个规则集,根据搜索的子字符串将值分配给熊猫中的特定列?,python,pandas,if-statement,dataframe,Python,Pandas,If Statement,Dataframe,我是Python(和Pandas库)的新手,需要在其中重新创建一些SQL代码 从表面上看,我的任务非常简单,我有几个列,我需要搜索它们以查找特定的字符串,如果它们存在,则在类别列中放置一个值 e、 g 有没有比列出if语句更好(更有效)的方法 如何将结果添加到新列中 谢谢我会这样做: In [32]: d = {'3UK':'Three', '(?:IPHONE|IPAD).*':'iOS', 'VODAF.*':'Vodafone', 'PAY.*':'PayG'}

我是Python(和Pandas库)的新手,需要在其中重新创建一些SQL代码

从表面上看,我的任务非常简单,我有几个列,我需要搜索它们以查找特定的字符串,如果它们存在,则在类别列中放置一个值

e、 g

有没有比列出if语句更好(更有效)的方法

如何将结果添加到新列中

谢谢

我会这样做:

In [32]: d = {'3UK':'Three', '(?:IPHONE|IPAD).*':'iOS',
              'VODAF.*':'Vodafone', 'PAY.*':'PayG'}

In [33]: a[['OS','Company','Payment']] = \
             a.Names.str.upper().str.split('_', expand=True).replace(d, regex=True)

In [34]: a
Out[34]:
                    Names  qty       OS   Company   Payment
0     IPHONE_3UK_CONTRACT  968      iOS     Three  CONTRACT
1       IPHONE_O2_SIMONLY  155      iOS        O2   SIMONLY
2        ANDROID_3UK_PAYG   77  ANDROID     Three      PayG
3  ANDROID_VODAF_CONTRACT  973  ANDROID  Vodafone  CONTRACT

找到了这样做的方法,但不确定是否最有效。If将遵循与我上面发布的相同的逻辑,If将创建一个带有规则的函数。这些规则将在预定义的搜索词列表中查找,然后为规则创建一个新列

每一列都需要它自己的函数,所以要为Phone、Carrier、Contract Type添加3列,我创建了3个函数

如下所示:

android_phones = ['samsung','xperia','google']

iphone= ['iphone','apple']


def OS_rules(raw_Df):
    val=''  

    if any(word in raw_Df['Names'].lower() for word in android_phones):
        val='android'
    elif any(word in raw_Df['Names'].lower() for word in iphone):
        val='iPhone'        
    else: val = 'Handset' 

    return val


df.loc[:,'OS_Type']=df.apply(OS_rules,axis=1)
android_phones = ['samsung','xperia','google']

iphone= ['iphone','apple']


def OS_rules(raw_Df):
    val=''  

    if any(word in raw_Df['Names'].lower() for word in android_phones):
        val='android'
    elif any(word in raw_Df['Names'].lower() for word in iphone):
        val='iPhone'        
    else: val = 'Handset' 

    return val


df.loc[:,'OS_Type']=df.apply(OS_rules,axis=1)