2017-10-16 103 views
2

我设法开发了我以前遇到的问题的答案(在此处找到:How can i create a ruleset to assign values to specific columns, based on searching substrings, in Pandas?)。从函数返回的多个值创建多个类别列

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

目前我的策略是如下:

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) 
这一战略

不过,我需要用“几乎”相同的规则创建多种功能,但具有不同的返回值。

有没有办法从单个函数返回多个值?并将其应用于多个新列?

例如

if any(word in raw_Df['Names'].lower() for word in android_phones): 
    val1='android' 
    val2='pixel' 
    val3='vodafone' 

etc etc等等,然后从那些创建新的列?

回答

0

用途:

#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