![](/img/trans.png)
[英]How to update a column in pandas DataFrame based on column from another 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.