python - 根据来自不同数据帧的另一列将值更新到当前数据帧中的新列
问题描述
我的数据框中有一列充满了消息,并希望根据该消息中存在的子字符串对它们进行分类。好吧,必须在消息中搜索的那些子字符串将从不同的数据框(我们称之为主数据框)中获取,并且我的主数据框是动态的,并且基于主列表中的列表,我必须在我的主数据框列中进行分类
注意:无论大写还是小写字母,这都必须有效
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
因此,如果在 df1 的 Messages 列中找到 Master_df['Strings'][0] 子字符串,则将 df1[category] 中的该行映射为 Master_df['Category'][0] 等等。
预期输出:
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
推荐阅读
- python - 为什么我的模型不能从 MNIST 数据库中生成准确的训练结果?
- winforms - Winforms Core .NET 5. 将子菜单添加到 ContextMenuStrip
- r - 使用 geom_text,在 ggplot 中轻推标签长度的一半
- javascript - IMG SRC json.parse 结果需要清理
- javascript - 如何更改 React JS 应用程序的简单组件的表单元素的文本“标签”的颜色?
- winapi - 使用 Win32 在窗口上移动绘图
- javascript - 加载具有相同类的两个滑块时,垂直滑块的 SlickJs 问题
- python - 在命令提示符下运行服务器时出现 django.db.migrations.exceptions.NodeNotFoundError
- .net-core - ASP.NET Core - 索引和搜索 JSON 文件
- python - 将熊猫数据框中的两个日期与当前日期进行比较并创建新列?