You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas多DataFrame重复行高亮时索引覆盖问题求助

问题根源

你写的highlight_yellow函数依赖全局变量rows,处理第二个DataFrame时,rows会被重新赋值成第二个表的重复行索引,导致第一个DataFrame的样式应用时用了新的rows值,高亮结果自然出错。

解决办法

把需要高亮的索引列表作为参数传给高亮函数,别用全局变量,让每个表的高亮逻辑各自独立。

修正后的完整代码:

import pandas as pd
import numpy as np

# 生成第一个DataFrame
colA = list(range(1,6))
colB = ['aa', 'bb', 'aa', 'cc', 'aa']
colC = [14,3,14,9,12]
colD = [108, 2001, 152, 696, 696]
df = pd.DataFrame(list(zip(colA, colB, colC, colD)), columns =['colA', 'colB', 'colC', 'colD']) 
print(df)

# 生成第二个DataFrame
colA = list(range(1,7))
colB = [208, np.nan ,201, 150, 900, 670]
colC = ['aa', np.nan ,'bb', 'aa', 'cc', 'bb']
df2 = pd.DataFrame(list(zip(colA, colB, colC)), columns =['colA', 'colB', 'colC'])
print(df2) 

# 修改高亮函数,接收需要高亮的索引列表作为参数
def highlight_yellow(x, highlight_rows):
    return ['background-color: yellow' if x.name in highlight_rows else '' for i in x]

# 处理第一个表的高亮
row_series = df['colB'].dropna(how = 'any').duplicated(keep = False)
highlight_rows_df = row_series[row_series].index.values
df_styled = df.style.apply(highlight_yellow, axis = 1, highlight_rows=highlight_rows_df)

# 处理第二个表的高亮
row_series = df2['colC'].dropna(how = 'any').duplicated(keep = False)
highlight_rows_df2 = row_series[row_series].index.values
df2_styled = df2.style.apply(highlight_yellow, axis = 1, highlight_rows=highlight_rows_df2)

# 导出到Excel,两个表分不同工作表
with pd.ExcelWriter('highlighted_data.xlsx') as writer:
    df_styled.to_excel(writer, sheet_name='Sheet1', index=False)
    df2_styled.to_excel(writer, sheet_name='Sheet2', index=False)
关键说明
  • 重构后的highlight_yellow函数通过参数接收当前表的高亮索引,不再依赖全局变量,避免了覆盖问题。
  • 每个DataFrame单独计算自己的高亮索引列表,应用样式时传入对应参数,确保各自的高亮逻辑互不干扰。
  • 新增了Excel导出代码,直接把两个带样式的表导出到同一个文件的不同工作表里,方便查看最终效果。

内容的提问来源于stack exchange,提问作者youaresoconfused

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:40:33