У меня есть фрейм данных, который содержит определенные столбцы, один из которых - Положение, а другой - Годы обслуживания.Исходя из этого, я хочу создать новую колонку «Life Cover».Я создал эту функцию для этого.
def LifeCover(row):
if row['Years of Service']>5:
val = 8
elif row['Years of Service']>2 and row['Position'] in ['Associate', 'Director', 'Director of Facilities Management', 'Director of Promise', 'Director, Head of Facilities Management']:
val = 8
elif row['Years of Service']>2 and row['Position'] not in ['Associate', 'Director', 'Director of Facilities Management', 'Director of Promise', 'Director, Head of Facilities Management']:
val = 7
else:
val = 3
return val
df['Potential Life Cover Level'] = df.apply(LifeCover, axis=1)
Это работает, но мне не нравится иметь такой большой список позиций, и оказывается, что список, возможно, тоже должен расти, так что этотакже не практично.
Мне нужно включить / исключить любую позицию, которая содержит слово «Ассоциированный член, директор или партнер».
Мне удалось отфильтровать следующим образом:
target = ['Associate', 'Director', 'Partner']
dfhigh = df[df['Position'].apply(lambda sentence: any(word in sentence for word in target))]
dflow = df[~df['Position'].apply(lambda sentence: any(word in sentence for word in target))]
Итак, я получаю фрейм данных с высокими позициями и один с низкими.
И затем я пытаюсь включить это в свою функцию:
def LifeCover2(row):
if row['Years of Service']>5:
val = 8
elif row['Years of Service']>2 and row['Position'] in dfhigh['Position']:
val = 8
elif row['Years of Service']>2 and row['Position'] in dflow['Position']:
val = 7
else:
val = 3
return val
Но по какой-то причине этовозвращает только значения 8 или 3.
Я также пробовал это:
def LifeCover2(row):
if row['Years of Service']>5:
val = 8
elif row['Years of Service']>2 and row['Position'].str.contains('Associate|Director|Partner'):
val = 8
elif row['Years of Service']>2 and (~row['Position'].str.contains('Associate|Director|Partner')):
val = 7
else:
val = 3
return val
, который возвращает AttributeError: ("объект 'str' не имеет атрибута 'str'", 'произошел в индексе69' )