根据其他列中的值比较值和彩色熊猫细胞

BoBoMann

我正在一个项目中,将最终值(在“金额”列中)与其他列中的值进行比较,以确定最终值是否违反了预定阈值。如果违反,则最终值将根据违反的阈值着色;如果未违反,则最终值将着色为绿色。样品:

 df

    Product     Components  Amount  Yellow  Orange  Red     Bound
       A             a1      61        50    55     60       Upper
       A             a2      28        60    30     20       Lower
       A             a3      37        10     5     0        Lower
       B             b1      89        90    100    110      Upper
       B             b2      91       100    95     90       Lower
       C             c1       5       10    15      20       Upper
       C             c2      29       30    20      10       Lower
       C             c3      15       100   200     300      Upper
       C             c4     201       500   400     300      Lower

预期:

彩色熊猫细胞

尝试输入代码:

 def highlight(df):
    r = 'red'
    g = 'green'
    o = 'orange'
    y = 'yellow'

    yellow_up = (df['Amount'] > df['Yellow']) & (df['Amount'] < df['Orange']) & (df['Amount'] < df['Red']) & (df['Bound']=='Upper')
    orange_up = (df['Amount'] > df['Yellow']) & (df['Amount'] > df['Orange']) & (df['Amount'] < df['Red']) & (df['Bound']=='Upper')
    red_up = (df['Amount'] > df['Yellow']) & (df['Amount'] > df['Orange']) & (df['Amount'] > df['Red']) & (df['Bound']=='Upper')

    yellow_down = (df['Amount'] < df['Yellow']) & (df['Amount'] > df['Orange']) & (df['Amount'] > df['Red']) & (df['Bound']=='Lower')
    orange_down = (df['Amount'] < df['Yellow']) & (df['Amount'] < df['Orange']) & (df['Amount'] > df['Red']) & (df['Bound']=='Lower')
    red_down = (df['Amount'] < df['Yellow']) & (df['Amount'] < df['Orange']) & (df['Amount'] < df['Red']) & (df['Bound']=='Lower')

    df1 = pd.DataFrame('background-color: ', index = df.index, columns = df.columns)
    df1['Amount'] = np.where(yellow_up, 'background-color: {}'.format(y), 'background-color: {}'.format(g))
    df1['Amount'] = np.where(orange_up, 'background-color: {}'.format(o), 'background-color: {}'.format(g))
    df1['Amount'] = np.where(red_up, 'background-color: {}'.format(r), 'background-color: {}'.format(g))

    df1['Amount'] = np.where(yellow_down, 'background-color: {}'.format(y), 'background-color: {}'.format(g))
    df1['Amount'] = np.where(orange_down, 'background-color: {}'.format(y), 'background-color: {}'.format(g))
    df1['Amount'] = np.where(red_down, 'background-color: {}'.format(y), 'background-color: {}'.format(g))

    return df1

df.style.apply(highlight, axis = None)

但是,这不符合预期。预先感谢您的帮助!

广晃

我会这样写函数:

def highlight(row):
    color_map = {'Yellow':'yellow','Orange':'orange', 'Red':'red'}
    name = row.name

    thresh = df.loc[name, ['Yellow','Orange','Red']]
    direction = -1 if df.at[name, 'Bound']=='Upper' else 1

    value = row['Amount'] * direction
    thresh = (thresh * direction).sort_values()

    if (thresh > value).any():
        color = color_map[(thresh > value).idxmax()]
    else:
        color = 'green'

    return [f'background-color:{color}']

# apply
df.style.apply(highlight, subset=['Amount'], axis=1)

输出:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据列值和其他列更新熊猫细胞

根据其他熊猫列值比较列值

根据熊猫中其他两列的比较更改列的值

根据其他列值在熊猫中添加新列

根据熊猫其他列中的值移动列

根据其他列中的值填充熊猫列

熊猫根据其他列中的条件和值创建新列

根据熊猫数据框中其他列的条件和值创建新列

如何根据熊猫中的其他列映射值?

根据其他两列替换熊猫中的值

熊猫使用其他列中的值创建新列,并根据列值进行选择

熊猫:根据其他列和值本身更改单元格值

遍历熊猫行并根据其他列中的值设置列值

如何根据熊猫中其他两列中的查找值分配最小值?

熊猫:根据其他多个列中的值填充空值

熊猫:根据对应于该值的行数,将列中的值替换为“其他”

熊猫根据其他列的值创建新的列ID

熊猫根据其他列的值移动到通讯列

根据先前的值和其他列替换或排序熊猫数据框列

根据其他数据框中的列值在熊猫数据框中创建列

熊猫根据其他列中的值更改列中的值

熊猫-根据其他列中的值将数据添加到列中

如何根据另一列中的间隔填充熊猫中其他列的缺失值?

如何根据其他两列中的值在熊猫数据框中添加新列

根据df中其他两个列的比较设置列值

根据R中其他两个列的比较生成新的列值

熊猫根据其他两列的值复制和编辑“ n”行

熊猫:如何根据其他列值的条件求和?

熊猫,根据其他列的值删除重复的行