【问题标题】:Styling in Pandas multi-criteriaPandas 多标准中的样式
【发布时间】:2021-09-15 04:10:34
【问题描述】:

在 Pandas 数据框上,我想在特定列上应用样式,在从不同列值中获取的多标准上。

table =
product    sales   revenues
fruit      10      6
eggs       15      12
fruit      16      8

如果产品是水果,我希望仅当销售额低于 17 时(不修改收入)变为红色,如果产品是鸡蛋,则适用另一个标准(= 低于 20)

所以只有数字 10 应该显示为红色。

我尝试设置 style.apply 和 style.applymap,但无法找出独立处理不同列的样式函数。

提前感谢您提供帮助的元素。

【问题讨论】:

    标签: pandas styling pandas-styles


    【解决方案1】:

    执行此操作的最简单方法是预先从 DataFrame 创建一个布尔索引,然后将 apply 它添加到特定子集:

    c1 = df['product'].eq('fruit') & df['sales'].lt(17)
    c2 = df['product'].eq('eggs') & df['sales'].lt(20)
    df.style.apply(lambda _: np.where(c1 | c2, 'background-color: red', ''),
                   subset=['sales'])
    


    不同的DataFrame用于显示条件:

    df = pd.DataFrame({'product': ['eggs', 'fruit', 'fruit', 'eggs'],
                       'sales': [ 15, 17, 16, 20],
                       'revenues': [12, 8, 12, 19]})
    

    c1fruit 小于17 的行:

    0    False
    1    False
    2     True
    3    False
    dtype: bool
    

    c2表示eggs小于20的行:

    0     True
    1    False
    2    False
    3    False
    dtype: bool
    

    np.where 根据c1c2True 的位置获取sales 列的颜色:

    np.where(c1 | c2, 'background-color: red', '')
    
    ['background-color: red' '' 'background-color: red' '']
    

    【讨论】:

    • 你好亨利,这完美地满足了我的需求。非常感谢。作为该论坛的新手,我如何验证您的解决方案?
    • 再次您好,要在“收入”列上应用不同的样式,我想在子集 [“收入”] 上应用互补样式,但它会删除第一个样式。有什么建议吗?非常感谢!
    • 样式应该链接在一起df.style.apply(..., subset...).apply(..., subset...)
    • 效果很好,我对这个工具的强大印象深刻。最后一个,有没有机会让 style.apply 处理来自枢轴数据框的多索引问题? (对我来说并不简单 - 对列进行寻址,尤其是当它们中的一些具有相同的子索引时)
    • 这取决于许多条件。如果没有看到实际的数据框,很难给出具体的答案。同样在 StackOverflow 的上下文中,这可能是一个不同的问题。我建议您使用特定的多索引数据框和样式条件打开一个 new 问题。
    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 2019-08-10
    • 2015-02-25
    • 2013-03-07
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多