【问题标题】:Highlight a row in a pandas df if that row also appears in another df如果该行也出现在另一个 df 中,则突出显示 pandas df 中的一行
【发布时间】:2023-01-09 20:11:52
【问题描述】:

我有两个数据帧 df1 和 df2。我想用黄色突出显示 df1 中也存在于 df2 中的所有行。

df1

df2

What I want to achive

到目前为止,我只找到了插入另一行并在那里使用变量来标识我必须为哪一行着色的解决方案。

我的问题是是否可以在下面介绍的函数中直接比较这两个 df。

所以这是两个 df:

df1 = pd.DataFrame([['AA',3,'hgend',1], ['BB','frdf',7,2], ['C1',4,'asef',4], ['C2',4,'asef',4], ['C3',4,'asef',4]], columns=list("ABCD"))
df2 = pd.DataFrame([['C1',4,'asef',4], ['C2',4,'asef',4], ['C3',4,'asef',4]], columns=list("XYZQ"))

这是我为行着色的代码:

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

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

正如我所说,如果我事先进行比较,插入另一列并在其中放置一个变量,然后我可以搜索该变量并突出显示该行。 我的问题是我是否也可以直接在函数中执行此操作。为此,我必须能够比较函数中的两个 df。这可能吗?能够比较一行就足够了,例如与.isin

【问题讨论】:

    标签: python pandas dataframe styler


    【解决方案1】:

    您可以定义一个临时列以使用合并来识别匹配项(指示列 in_1 变为 left_onlyboth 取决于该行是否存在于 df2 中):

    def highlight_rows(row):
        highlight = 'yellow' if row['in_1'] == "both" else ""
        return ['background-color: {}'.format(highlight) for r in row]
    
    (pd.merge(df1, df2.set_axis(df1.columns.tolist(), axis=1), 
              how="left", indicator="in_1")
        .style
        .hide_columns(['in_1'])
        .apply(highlight_rows, axis=1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 2021-02-19
      • 2022-11-30
      相关资源
      最近更新 更多