Python 从函数返回的多个值创建多个类别列

Python 从函数返回的多个值创建多个类别列,python,pandas,if-statement,Python,Pandas,If Statement,我设法找到了我以前遇到的一个问题的答案(在这里找到:) 然而,我想知道是否有更有效的方法来做到这一点。我想根据在描述列中搜索的字符串创建多个分类列 目前我的策略如下: android_phones = ['samsung','xperia','google'] iphone= ['iphone','apple'] def OS_rules(raw_Df): val='' if any(word in raw_Df['Names'].lower() for word i

我设法找到了我以前遇到的一个问题的答案(在这里找到:)

然而,我想知道是否有更有效的方法来做到这一点。我想根据在描述列中搜索的字符串创建多个分类列

目前我的策略如下:

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)
但是,使用这种策略,我需要创建多个具有“几乎”相同规则但返回值不同的函数

有没有一种方法可以从单个函数返回多个值?并在多个新列中应用它们

e、 g

等等,然后从中创建新列?

使用:

#create dictionary of all lists
d = {'android':android_phones, 'iPhone':iphone}

def OS_rules(raw_Df):

    #loop by dictionary and return key of dict
    for k, v in d.items():
        if any(word in raw_Df['Names'].lower() for word in v):
            return k    

#if no value match get NaN, so fillna by default value
df['OS_Type']=df.apply(OS_rules,axis=1).fillna('Handset')
print (df)
                    Names  qty  OS_Type
0     IPHONE_3UK_CONTRACT  968   iPhone
1       IPHONE_O2_SIMONLY  155   iPhone
2        ANDROID_3UK_PAYG   77  Handset
3  ANDROID_VODAF_CONTRACT  973  Handset
#create dictionary of all lists
d = {'android':android_phones, 'iPhone':iphone}

def OS_rules(raw_Df):

    #loop by dictionary and return key of dict
    for k, v in d.items():
        if any(word in raw_Df['Names'].lower() for word in v):
            return k    

#if no value match get NaN, so fillna by default value
df['OS_Type']=df.apply(OS_rules,axis=1).fillna('Handset')
print (df)
                    Names  qty  OS_Type
0     IPHONE_3UK_CONTRACT  968   iPhone
1       IPHONE_O2_SIMONLY  155   iPhone
2        ANDROID_3UK_PAYG   77  Handset
3  ANDROID_VODAF_CONTRACT  973  Handset