条件格式Pandas

frebpwbc  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(118)

我正在尝试有条件地格式化一个Pandas Dataframe ,并将输出写入excel。我卡在了一个点上:

import pandas as pd
df = pd.DataFrame([['x',3,1],['x',2,2,],['y',4,6]],columns=list("ABC"))

def highlight_rows(row):
    value = row.loc['A']
    if value in ('x'):
        color = '#BAFFC9'
    else:
        color = None
return ['background-color: {}'.format(color) for r in row]


df.style.apply(highlight_rows,axis=1)

上面的代码将突出显示列A中的值== 'x'的所有行。然而,我想做的是类似于:如果A列== 'x',则突出显示B列,否则如果A列== 'y',则突出显示C列,否则无
我试着通过编写另一个函数来突出显示列来组合上面的代码,但似乎不起作用。

def highlight_cols(col):
    if col.name == 'B':
        color = '#BAFFC9'
    else:
        color = None
return ['background-color: {}'.format(color) for c in col]

调用上述两个函数如下

df.style.apply(highlightrows,axis=1).apply(highlight_cols,subset=['B])

任何指示都将受到赞赏。

zbdgwd5y

zbdgwd5y1#

我的方法是尝试找到每一行,并检查突出显示列的值,列名。它应该完成任务。

import pandas as pd
df = pd.DataFrame([['x',3,1],['x',2,2,],['y',4,6]],columns=list("ABC"))

c_high= 'background-color: #BAFFC9'
def highlight_rows(row):
    lst = []
    value = row.loc['A']
    for col in row.index:
        if value in ('x') and col == 'B':
            lst.append(c_highlight)
            continue
        if value in ('y') and col == 'C':
            lst.append(c_highlight)
            continue
        lst.append(None)
    return lst

df.style.apply(highlight_rows,axis=1)

相关问题