如何高亮Pandas DataFrame中基于相同ID判定的重复行(排除无重复NaN行)
实现方案
1. 构造测试数据集
首先我们先把你给出的样例数据导入为pandas DataFrame:
import pandas as pd import numpy as np data = { "Date": ["2021-2-3"] * 8, "ID_1": [12, 12, 33, 35, 35, np.nan, 35, 88], "ID_2": [23, 56, 56, 45, 23, 99, np.nan, 44], "Name": ["Sam", "Sem", "Tom", "Jon", "Sam", "Jim", "Jon", "Sam"] } df = pd.DataFrame(data)
2. 计算高亮标记
我们先分别统计两个ID列里出现次数大于1的非空值,再逐行判断是否符合高亮条件:
# 提取ID_1列中重复出现的非空值集合 dup_id1 = set(df["ID_1"].value_counts()[lambda x: x > 1].index) # 提取ID_2列中重复出现的非空值集合 dup_id2 = set(df["ID_2"].value_counts()[lambda x: x > 1].index) # 生成高亮标记列,和你预期的输出一致 df["Highlight"] = df.apply( lambda row: True if (pd.notna(row["ID_1"]) and row["ID_1"] in dup_id1) or (pd.notna(row["ID_2"]) and row["ID_2"] in dup_id2) else "", axis=1 )
3. 渲染绿色高亮效果
用pandas的样式接口给符合条件的行设置绿色背景:
def highlight_dup_rows(row): return ["background-color: lightgreen"] * len(row) if row["Highlight"] else [""] * len(row) # 生成带高亮的表格 styled_table = df.style.apply(highlight_dup_rows, axis=1) # 如果需要导出为本地HTML文件可以执行以下代码 # styled_table.to_html("highlighted_table.html")
如果你不需要在表格中显示Highlight列,也可以把判断逻辑直接写到高亮函数里,无需新增列。
内容的提问来源于stack exchange,提问作者Aps
相关产品推荐
相关产品推荐

