[英]Highlight a row in a pandas df if that row also appears in another df
我有兩個數據幀 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_only
或both
取決於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.