按行设置条件格式:标记每行最大值(绿字)与排除0的最小值(红字)
解决DataFrame行内最值字体颜色设置问题
要实现每行最大值绿色字体、排除0后的最小值红色字体的需求,不能直接用highlight_min/highlight_max(这两个方法仅修改单元格背景色),需要自定义样式函数结合style.apply来实现,具体步骤如下:
步骤1:准备数据并统一类型
首先确保DataFrame中的数值列是整数类型(原表格中的05、02是字符串格式,需要转换):
import pandas as pd # 创建示例数据 data = { 'Sector': ['A', 'B', 'C'], '4/1/2022': ['0', '18', '02'], '5/1/2022': ['05', '20', '09'], '6/1/2022': ['12', '09', '12'] } df = pd.DataFrame(data) # 将数值列转换为整数 num_cols = df.columns[1:] df[num_cols] = df[num_cols].astype(int)
步骤2:自定义样式函数
编写函数判断每个值是否为该行最大值,或排除0后的最小值,返回对应字体颜色的CSS样式:
def color_row_values(row): # 获取当前行的数值部分(排除Sector列) row_vals = row[num_cols] # 计算最大值 max_val = row_vals.max() # 计算排除0后的最小值(处理全0的情况,避免报错) non_zero_vals = row_vals[row_vals != 0] min_val = non_zero_vals.min() if len(non_zero_vals) > 0 else None # 生成样式列表 styles = [] for val in row: if val == max_val: styles.append('color: green;') elif min_val is not None and val == min_val: styles.append('color: red;') else: styles.append('') return styles
步骤3:应用样式并展示
用style.apply将函数应用到每一行(axis=1表示按行处理):
styled_df = df.style.apply(color_row_values, axis=1) # 在Jupyter环境中直接运行即可看到带样式的表格 styled_df
效果说明
- 每行的最大值会显示为绿色字体
- 每行中排除0后的最小值会显示为红色字体
- 若某行全为0,则不会有红色字体(可根据需求调整全0场景的处理逻辑)
内容的提问来源于stack exchange,提问作者Saanchi
相关产品推荐
相关产品推荐

