python - Python Pandas 中的灵活链接

标签 python pandas chaining

环境
我按顺序将两种方法应用于 Pandas 造型器对象,例如

df.style \
  .applymap(mapping1, subset=["column_a"]) \
  .applymap(mapping2, subset=["column_b"])
不过,我应用的映射各不相同。例如,我可能意识到我想添加一个名为 mapping3 的新映射。用于列 column_c .为了可扩展性,我希望能够快速添加映射并应用它,而不必在上面的代码片段中添加一行。
我的问题
我想灵活地提供映射并将它们全部应用到df ,其中输入是映射列表(如 mappings = [(mapping1, col1), (mapping2, col2), (mapping3, col3)],输出是样式化数据框。
尽管这个问题使用了样式化数据框的例子,但我认为这个问题并不限于链接样式器对象本身。我认为它与 Pandas 中所有类型的链接方法都相关。
可重现的例子
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

关于python - Python Pandas 中的灵活链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63686157/

相关文章:

python - 生成围绕零的二项式分布

python - 左内加入 Pandas

python - 删除包含任何数字子字符串的列行

qt - 在 QT 中,链接模型无法按预期工作

javascript - 不能推迟或延迟 ColdFusion.navigate() , ColdFusion.Ajax.submitForm()

python - 如何从 Perl 导入和调用 Python 函数?

python - 如何在 python 中访问 IEEE 754 中定义的舍入模式?

python - 更新 Tensorflow 中的变量切片

python - PySpark 和方法链

ruby - ruby 中的条件链接