如何在Pandas中对比原生列高亮模型列并生成统计状态列
Pandas 实现高亮与统计列需求
步骤1:新增统计与状态列
先处理统计逻辑,筛选所有模型(MODEL)列,计算每行中值小于原生(NATIVE)列的MODEL列数量,再生成状态列:
# 筛选所有以MODEL开头的列(根据实际列名调整匹配规则) model_cols = df.columns[df.columns.str.startswith('MODEL')] # 若列名是明确列表,可直接指定:model_cols = ['MODEL1', 'MODEL2', ...] # 计算每行中MODEL列值 < NATIVE的数量 df['model_less_native_count'] = (df[model_cols] < df['NATIVE']).sum(axis=1) # 生成状态列:数量<5填done,否则填repeat df['status'] = df['model_less_native_count'].map(lambda x: 'done' if x < 5 else 'repeat')
步骤2:实现MODEL列高亮
编写样式函数,对每行中NATIVE值小于对应MODEL列值的单元格添加浅绿色背景:
def highlight_model_cells(row): styles = [''] * len(row) native_val = row['NATIVE'] # 获取所有MODEL列的索引位置 model_col_indices = [df.columns.get_loc(col) for col in model_cols] for idx in model_col_indices: if native_val < row.iloc[idx]: styles[idx] = 'background-color: lightgreen' return styles # 应用样式 styled_dataframe = df.style.apply(highlight_model_cells, axis=1)
关键说明
- 原代码问题:列名含空格/特殊字符时不能直接用
x.MODEL 1,需用索引或引号引用;逻辑判断条件错误,需明确对比NATIVE与单个MODEL列的值。 - 大数据量适配:20000行数据使用
style.apply(axis=1)会逐行处理,若追求效率,可尝试用向量化方式生成样式矩阵,但上述代码已能满足功能需求。 - 列名匹配:若MODEL列命名规则不是以MODEL开头,需调整
model_cols的筛选逻辑。
内容的提问来源于stack exchange,提问作者devranjan
相关产品推荐
相关产品推荐

