css 如何有条件地将颜色应用于Pandas Dataframe 中的列表类型值

mrwjdhj3  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(122)

我有下面的 Dataframe

import pandas as pd
    import numpy as np
    d = {'Cell':['A','B','C','D','E'],'D1':[5, 2, 2, 6,6], 'D2':[np.nan, 5, 6, np.nan,3], 'D3':[7,np.nan, 5, 5,np.nan], 'D6':[17, 3, np.nan,np.nan,2],'diff%':[np.nan,[40],[16.67],[16.67,50],[50,33,24]]}
    df = pd.DataFrame(d)

    Cell  D1   D2   D3    D6         diff%
0    A   5  NaN  7.0  17.0           NaN
1    B   2  5.0  NaN   3.0          [40]
2    C   2  6.0  5.0   NaN       [16.67]
3    D   6  NaN  5.0   NaN   [16.67, 50]
4    E   6  3.0  NaN   2.0  [50, 33, 24]

1.我想创建一个 Dataframe ,其中包含diff%列中任何值大于30的行
1.有条件地仅对〉30的值进行颜色编码(样式),采用粗体和红色文本颜色样式,用于从 Dataframe 创建HTML表。
下面是我想要的 Dataframe

Cell  D1   D2   D3    D6         diff%
1    B   2  5.0  NaN   3.0            [40]
3    D   6  NaN  5.0   NaN       [16.67, 50]
4    E   6  3.0  NaN   2.0       [50, 33, 24]

请让我知道任何解决这个问题的办法?

lndjwyie

lndjwyie1#

下面是使用lambda、isinstance()any()方法的方法

df1 = df[df['diff%'].apply(lambda x: isinstance(x, list) and any(i > 30 for i in x))]
print(df1)
Cell  D1   D2   D3   D6         diff%
1    B   2  5.0  NaN  3.0          [40]
3    D   6  NaN  5.0  NaN   [16.67, 50]
4    E   6  3.0  NaN  2.0  [50, 33, 24]

要应用颜色,可以使用服装函数和df.style.applymap()

def color_diff(x):
    if isinstance(x, list) and any(i>30 for i in x):
        return 'color: red; font-weight: bold'
    else:
        return ''
df1 = df1.style.applymap(color_diff, subset=['diff%'])
df1

相关问题