【问题标题】:Conditional styling of a DataFrame using another dataframe使用另一个数据框的数据框的条件样式
【发布时间】:2021-08-06 15:22:24
【问题描述】:

我有两个 3X3 pandas DataFrame df1

    A   B   C
0   8   3   9
1   1   7   7
2   3   3   8

df2

    A   B   C
0   2   1   2
1   5   9   7
2   1   8   3

我想要获得的是一个表格的 Jupyter Notebook 输出,其元素与 df1 相同,但如果元素值大于 df2 的对应值,它们的字体颜色为红色。 因此,预期的输出类似于以下内容

    A     B     C
0   8(r)  3(r)  9(r)
1   1     7     7 
2   3(r)  3     8(r)

(r) 表示单元格的字体颜色为红色,不是真正的打印输出。


我尝试的是applymap这样的方法

df1.style.applymap(lambda x: 'color : red' if x > df2 else '')

但无法弄清楚如何将labmda xdf2 置于平等地位。 有人可以帮忙吗?

【问题讨论】:

    标签: python-3.x pandas dataframe pandas-styles


    【解决方案1】:

    我们应该在axis=None上创建一个样式的DataFrame然后Styler.apply

    import pandas as pd
    
    df1 = pd.DataFrame({'A': [8, 1, 3], 'B': [3, 7, 3], 'C': [9, 7, 8]})
    df2 = pd.DataFrame({'A': [2, 5, 1], 'B': [1, 9, 8], 'C': [2, 7, 3]})
    

    选项1:比较和replace

    style_df = (
            df1 > df2                  # Compare DataFrames
    ).replace({
        True: 'background-color:red',  # True Styles
        False: ''                      # False Styles
    })
    
    df1.style.apply(lambda _: style_df, axis=None)
    

    或者直接在apply调用中创建样式DataFrame:

    df1.style.apply(lambda _: (df1 > df2).replace({
        True: 'background-color:red',
        False: ''
    }), axis=None)
    

    选项 2:也许性能更高,但不那么惯用 np.where

    import numpy as np
    
    df1.style.apply(lambda _: np.where(
        df1 > df2,               # Compare DataFrames
        'background-color:red',  # True Styles
        ''                       # False Styles
    ), axis=None)
    

    两者都生成样式表:

    如何使用style_df确定样式:

                          A                     B                     C
    0  background-color:red  background-color:red  background-color:red
    1                                                                  
    2  background-color:red                        background-color:red
    

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 2017-04-13
      • 1970-01-01
      • 2021-09-08
      • 2020-01-11
      • 2019-10-14
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多