微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python熊猫中的灵活链接

如何解决Python熊猫中的灵活链接

设置

我正在依次将两种方法应用于pandas样式器对象,例如

df.style \
  .applymap(mapping1,subset=["column_a"]) \
  .applymap(mapping2,subset=["column_b"])

不过,我要应用的映射有所不同。例如,我可能意识到我想为列mapping3添加一个名为column_c的新映射。为了实现可扩展性,我希望能够快速添加一个映射并应用该映射,而不必在上面的代码段中也添加一行。

我的问题

我想灵活地提供映射并将它们全部应用于df,其中输入是映射列表(如mappings = [(mapping1,col1),(mapping2,col2),(mapping3,col3)]输出是样式化的数据框。

即使这个问题使用了样式化数据框的示例,我也认为这个问题不仅仅限于链接样式化器对象本身。我认为这与熊猫中所有类型的链接方法有关。

可复制的示例

import pandas as pd

df = pd.DataFrame({
    "column_a": [-1,-2,3,4],"column_b": ["good","bad","neutral","amazing"],"column_c": [0.1,0.9,0.5,1]
})


def mapping1(val):
    if val < 0:
        color = "red"
    elif val > 0:
        color = "green"
    else:
        color = "black"
    return "background-color: %s" % color


def mapping2(val):
    if val == "amazing":
        color = "purple"
    else:
        color = "black"
    return "color: %s" % color


def mapping3(val):
    if val < 0.8:
        color = "orange"
    if val >= 0.8:
        color = "green"
    return "color: %s" % color


styler = df.style \
    .applymap(mapping1,subset=['column_a']) \
    .applymap(mapping2,subset=["column_b"]) \
    .applymap(mapping3,subset=["column_c"])

styler

解决方法

这是使用style.apply并反转字典的一种方法

mappings = [(mapping1,'column_a'),(mapping2,'column_b'),(mapping3,'column_c')]

df.style.apply({v:k for k,v in mappings})

enter image description here

,

我们可以在循环内执行applymap

mappings = [
    (mapping1,'column_c')]

x = df.style
for m in mappings:
    x = x.applymap(m[0],m[1])

x

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。