如何用熊猫中的字典映射列值的一部分?

苏维克·雷

我有一个看起来像下面的数据

data = [(datetime.datetime(2021, 2, 6, 18, 48, 18, 97962), u'London', u'New York', u'UPLOAD_LOW'), (datetime.datetime(2021, 2, 6, 18, 48, 18, 97962), u'Berlin', u'Tokyo', u'DOWNLOAD_HIGH'), (datetime.datetime(2021, 2, 6, 18, 47, 8, 209495), u'Paris', u'Toronto', u'DROP_LOW')]

这是装在大熊猫中的样子

                        date  source destination          issue
0 2021-02-06 18:48:18.097962  London    New York     UPLOAD_LOW
1 2021-02-06 18:48:18.097962  Berlin       Tokyo  DOWNLOAD_HIGH
2 2021-02-06 18:47:08.209495   Paris     Toronto       DROP_LOW

现在,我想将列中的值映射issue到字典。使用pandasmap函数pandas.Series.map可帮助完成工作。但是问题是字典中要映射的键仅包含部分列值。

这是我下面的字典

issue_short_form_map = {
        "UPLOAD": "UP",
        "MEMORY": "MEM",
        "DOWNLOAD": "DN"
}

现在说我想issue用上述字典映射列通常这就是我要做的

df = pd.DataFrame(data)
df.columns = ["date", "source", "destination", "issue"]
# map the values in issue column to the dictionary. Anything that doesn't match, keep the original
df["issue"] = df["issue"].map(issue_short_form_map).fillna(df["issue"])

但是问题是issue列中的值不直接与键匹配,而是只有一部分匹配(在拆分_并获得第一部分之后)。

有什么办法可以_对列值进行拆分并使其与字典映射起作用?任何不匹配的内容都应保持原样。

我的最终输出应如下所示

                        date  source destination          issue
0 2021-02-06 18:48:18.097962  London    New York         UP_LOW
1 2021-02-06 18:48:18.097962  Berlin       Tokyo        DN_HIGH
2 2021-02-06 18:47:08.209495   Paris     Toronto       DROP_LOW
智慧

您可以split先发布问题列,仅使用映射转换第一部分,然后再添加其余部分:

splits = df['issue'].str.split('_')
short_issue = splits.str[0].map(issue_short_form_map).fillna(splits.str[0])
df['issue'] = short_issue + '_' + splits.str[1]

df
#                        date  source destination     issue
#0 2021-02-06 18:48:18.097962  London    New York    UP_LOW
#1 2021-02-06 18:48:18.097962  Berlin       Tokyo   DN_HIGH
#2 2021-02-06 18:47:08.209495   Paris     Toronto  DROP_LOW

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于列的一部分映射值

熊猫用字典中的值替换字符串的一部分

熊猫-将列的一部分聚合为新列中的新值

如何使用熊猫删除列值中的URL字符串的第一部分?

如何僅從字典中獲取鍵的一部分的值?

如何只处理 Python 中字典值列表的第一部分?

如何在熊猫中取一列的一部分与另一列的一部分匹配?

如何基于多个条件更改列的一部分中的值?

如何更改列中的字符串值,保存其中的一部分?

如何在sql中显示“值”列的一部分?

Orbeon XForms-如何用SOAP响应中的值替换实例的一部分

在python中获得字典的一部分

从字典中获取一部分

用系列/字典中定義的值替換 df 列的一部分

如何用Python替换String SQLite3列的一部分

如何在 for 循環中計算值作為字典鍵的一部分

如何将字符串的一部分从列复制到熊猫的新列中

如果子字符串不是字典鍵值的一部分,如何從列行中刪除子字符串?

删除熊猫列中的一部分字符串

熊猫:从不同列中的元素替换字符串的一部分

定义列系列的一部分以在熊猫中建立索引

如何用熊猫中的另一个字符串替换电子邮件地址的一部分?

如何将字符串的一部分存储到字典中

根据R中另一列的一部分更改列的值

如何删除哈希值的一部分?

用熊猫重复用另一列的一部分填充一列的值

如何忽略列值上的字符串的一部分

如何按熊猫中时间戳值的一部分进行分组?

比较 SQL Server 中列的一部分的值