Python 如何创建一个规则集,根据搜索的子字符串将值分配给熊猫中的特定列?
我是Python(和Pandas库)的新手,需要在其中重新创建一些SQL代码 从表面上看,我的任务非常简单,我有几个列,我需要搜索它们以查找特定的字符串,如果它们存在,则在类别列中放置一个值 e、 g 有没有比列出if语句更好(更有效)的方法 如何将结果添加到新列中 谢谢我会这样做: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'}
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)