簡體   English   中英

如果該行也出現在另一個 df 中,則突出顯示 pandas df 中的一行

[英]Highlight a row in a pandas df if that row also appears in another df

我有兩個數據幀 df1 和 df2。 我想用黃色突出顯示 df1 中也存在於 df2 中的所有行。

df1

df2

我想要達到的目標

到目前為止,我只找到了插入另一行並在那里使用變量來標識我必須為哪一行着色的解決方案。

我的問題是下面介紹的function中是否可以直接比較這兩個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)

正如我所說,如果我事先進行比較,插入另一列並在其中放置一個變量,然后我可以搜索該變量並突出顯示該行。 我的問題是我是否也可以直接在 function 中執行此操作。為此,我必須能夠比較 function 中的兩個 df。這可能嗎? 能夠比較單行就足夠了,例如 with.isin

與 function 內部的df2相比效率低下。

您可以定義一個臨時列以使用合並來標識匹配項(指示列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))

在此處輸入圖像描述


或者,要在 function 中實際進行比較,請預先定義一組df2行的元組:

set_df2 = set(df2.apply(tuple, axis=1))

def highlight_rows(row):
    color = 'yellow' if tuple(row) in set_df2 else ""
    return [f'background-color: {color}'] * len(row)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM