根据python中的字符串值标记数据

时间:2019-07-07 20:32:39

标签: python pandas pandas-groupby contains

我有一个具有8000行的数据框,其中列job_name包含带有短“作业标头”的字符串(请参见下文)。 我创建了包含要分组的各个职位的不同列表。

job_hilfskraft = ['bretreuungskraft', 'pflegehilfskraft', 'pflegehelfer', 'krankenpflegehelfer','altenpflegerhelfer', 'pflegeassistent','pflegeassistenz','pflegehilfskräfte', 'pflegeassistenten', 'altenpflegehilfskraft', 'pflegeassistentin','altenpflegehelfer']
job_fachkraft = ['pflegefachkraft', 'altenpfleger','pflegefachkräfte','altenpflegerin', 'pflegekraft', 'krankenpfleger', 'krankenpfleger', 'altenpflegerin', 'altenpflegefachkraft', 'pflegemitarbeiter']
job_leitung = ['pflegedienstleitung', 'pflegedienstleiter', 'wohnbereichsleiter', 'einrichtungsleiter']
job_sonstige = ['küchenhilfskraft', 'reinigungskraft', 'küchenleiter', 'servicekraft', 'spülkraft', 'empfangskraft']

包含工作位置的字符串的示例。

    job_name
0   Küchenhilfskraft in Teilzeit gesucht!
1   Examinierter Krankenpfleger in ambulanter Station

所需的输出:

        job_name                                        job_label
0   Küchenhilfskraft in Teilzeit gesucht!               sonstige
1   Examinierter Krankenpfleger in ambulanter Station   fachkraft

我使用

df['job_label'] = ""

df['job_label'][df.job_name.str.contains('|'.join(job_hilfskraft))] = 'hilfskraft'
df['job_label'][df.job_name.str.contains('|'.join(job_leitung))] = 'leitung'
df['job_label'][df.job_name.str.contains('|'.join(job_sonstige))] = 'sonstige'
df['job_label'][df.job_name.str.contains('|'.join(job_fachkraft))] = 'fachkraft'

但是它不会将标签分配给相应的行或仅分配几个...(<5%的行)

我也收到每行“包含”的消息:

  

SettingWithCopyWarning:   试图在DataFrame的切片副本上设置一个值

1 个答案:

答案 0 :(得分:1)

这应该可以解决您当前的问题。

df['job_label'] = ""

df.loc[df.job_name.str.contains('|'.join(job_hilfskraft)), 'job_label'] = 'hilfskraft'
df.loc[df.job_name.str.contains('|'.join(job_leitung)), 'job_label'] = 'leitung'
df.loc[df.job_name.str.contains('|'.join(job_sonstige)), 'job_label'] = 'sonstige'
df.loc[df.job_name.str.contains('|'.join(job_fachkraft)), 'job_label'] = 'fachkraft'

我可能会这样写:

lookup = {'hilfskraft': ['bretreuungskraft', 'pflegehilfskraft', 'pflegehelfer', 'krankenpflegehelfer','altenpflegerhelfer', 'pflegeassistent','pflegeassistenz','pflegehilfskräfte', 'pflegeassistenten', 'altenpflegehilfskraft', 'pflegeassistentin','altenpflegehelfer'],
'fachkraft': ['pflegefachkraft', 'altenpfleger','pflegefachkräfte','altenpflegerin', 'pflegekraft', 'krankenpfleger', 'krankenpfleger', 'altenpflegerin', 'altenpflegefachkraft', 'pflegemitarbeiter'],
'leitung': ['pflegedienstleitung', 'pflegedienstleiter', 'wohnbereichsleiter', 'einrichtungsleiter'],
'sonstige': ['küchenhilfskraft', 'reinigungskraft', 'küchenleiter', 'servicekraft', 'spülkraft', 'empfangskraft']}


df['job_label'] = ""

for replace, keywords in lookup.items():
    for k in keywords:
        df.loc[df.job_name.str.contains(k, case=False, regex=False), 'job_label'] = replace