繁体   English   中英

根据来自不同 dataframe 的另一列,将值更新到当前 dataframe 中的新列

[英]Update the value into new column in current dataframe based on another column from different dataframe

我的 dataframe 中有一个包含完整消息的列,并希望根据该消息中存在的 substring 对它们进行分类。 好吧,必须在消息中搜索的那些子字符串将从不同的数据帧(我们称之为主数据帧)中获取,我的主 dataframe 是动态的,并且基于主列表中的列表,我必须在我的主 dataframe 列中进行分类

注意:无论大小写字母如何,这都必须有效

df1 表如下所示:

           Messages
0         Firewall_Error
1         Firewall_Error_1
2         Firewall_Error_2
3         Firewall_Error_3
4        Wifihealth_1_Info
              ...         
109       Firewall_Error_1
110       Firewall_Error_2
111       Firewall_Error_3
112      Wifihealth_1_Info
113    Wifihealth_2_Failed

Master_df 看起来像:

    Strings Category
0   error   Error
1   info    Information
2   failed  Warning

因此,如果 Master_df['Strings'][0] substring 在 df1 的 Messages 列中找到,则 map df1[category] 中的该行为 Master_df['Category'][0] 等等。

预期 output:

df1 必须如下所示:

           Messages           category
0         Firewall_Error      Error
1         Firewall_Error_1    Error
2         Firewall_Error_2    Error
3         Firewall_Error_3    Error
4        Wifihealth_1_Info    Information
              ...         
109       Firewall_Error_1    Error
110       Firewall_Error_2    Error
111       Firewall_Error_3    Error
112      Wifihealth_1_Info    Information
113    Wifihealth_2_Failed    warning

代码尝试:

for i in range(0,len(Master_df['Strings'])):
    df1['Category'] = pd.np.where(df1.Messages.str.contains(Master_df['Strings'][i]), Master_df['Category'][i]))

首先将Series.str.lower用于小写,然后将Series.str.extract通过连接的Strings转换为index ,以便Series.map可能映射到新列:

#if need also convert Strings to lowercases
s = Master_df.set_index('Strings')['Category'].rename(index=str.lower)
pat = f'({"|".join(s.index)})'
df1['Category'] = df1['Messages'].str.lower().str.extract(pat, expand=False).map(s)
print (df1)
                Messages     Category
0         Firewall_Error        Error
1       Firewall_Error_1        Error
2       Firewall_Error_2        Error
3       Firewall_Error_3        Error
4      Wifihealth_1_Info  Information
109     Firewall_Error_1        Error
110     Firewall_Error_2        Error
111     Firewall_Error_3        Error
112    Wifihealth_1_Info  Information
113  Wifihealth_2_Failed      Warning

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM