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

如何在Pandas DataFrame中筛选行并对列表类型值条件着色

问题描述

现有如下Pandas DataFrame:

import pandas as pd
import numpy as np
d = {'Cell':['A','B','C','D','E'],'D1':[5, 2, 2, 6,6], 'D2':[np.nan, 5, 6, np.nan,3], 'D3':[7,np.nan, 5, 5,np.nan], 'D6':[17, 3, np.nan,np.nan,2],'diff%':[np.nan,[40],[16.67],[16.67,50],[50,33,24]]}
df = pd.DataFrame(d)

对应的表格输出:

CellD1D2D3D6diff%
A5NaN7.017.0NaN
B25.0NaN3.0[40]
C26.05.0NaN[16.67]
D6NaN5.0NaN[16.67, 50]
E63.0NaN2.0[50, 33, 24]

需要完成两个需求:

  • 生成新DataFrame,仅保留diff%列中存在大于30的元素的行;
  • 为diff%列中大于30的元素添加红色加粗的条件样式,用于生成HTML表格。

期望输出的DataFrame:

CellD1D2D3D6diff%
B25.0NaN3.0[40]
D6NaN5.0NaN[16.67, 50]
E63.0NaN2.0[50, 33, 24]
解决方案

1. 筛选符合条件的行

通过apply函数检查diff%列的每个元素,排除NaN行后,判断列表中是否存在大于30的值,以此过滤行:

# 生成筛选掩码:仅保留diff%为列表且包含>30元素的行
mask = df['diff%'].apply(lambda x: any(num > 30 for num in x) if isinstance(x, list) else False)
filtered_df = df[mask].reset_index(drop=True)

执行后filtered_df即为符合要求的筛选结果。

2. 添加条件样式并生成HTML表格

自定义样式函数,对diff%列中大于30的元素嵌入HTML样式标签,再通过Pandas的style对象生成可直接使用的HTML表格:

def style_diff_percent(val):
    if not isinstance(val, list):
        return str(val)
    # 遍历列表元素,为>30的数值添加红色加粗样式
    styled_items = []
    for num in val:
        if num > 30:
            styled_items.append(f'<span style="color:red; font-weight:bold;">{num}</span>')
        else:
            styled_items.append(str(num))
    return f"[{', '.join(styled_items)}]"

# 应用样式到diff%列
styled_df = filtered_df.style.format({'diff%': style_diff_percent})

# 导出为HTML表格(escape=False确保样式标签不被转义)
html_table = styled_df.to_html(escape=False)

生成的html_table可直接保存为.html文件或嵌入网页,大于30的数值会显示为红色加粗效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:20:53