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

如何用Bokeh简洁绘制Pandas GroupBy分组对象?

简洁实现Bokeh按动态分组绘制折线图

当然有简洁的实现方式!针对分组数量不固定的场景,我们可以利用Pandas分组的遍历特性,结合Python的列表推导式来一行搞定所有分组的折线绘制,完全不用手动为每个分组写单独的p.line()语句。

实现代码

from pandas import DataFrame
from bokeh.plotting import figure
data = dict(x = [0,1,2,0,1,2], y = [0,1,2,4,5,6], g = [1,1,1,2,2,2])
df = DataFrame(data)
p = figure()

# 一行代码完成所有分组的折线绘制
_ = [p.line('x', 'y', source=group) for _, group in df.groupby('g')]

代码解释

  • df.groupby('g')会返回一个可迭代的分组对象,每次迭代会给出分组键(这里用_占位,因为我们暂时不需要用到分组的标识)和对应的分组数据子集(group)。
  • 列表推导式会自动遍历所有分组,对每个分组调用p.line()绘制折线,完全适配分组数量动态变化的场景。
  • 用_接收推导式生成的列表,是因为我们不需要保存每个p.line()返回的Line对象,只是执行绘制操作而已。

如果需要给不同分组的折线设置不同样式(比如颜色、线型),也可以在推导式里扩展,比如:

colors = ['blue', 'red', 'green']  # 颜色数量可匹配分组数
_ = [p.line('x', 'y', source=group, color=colors[i]) for i, (_, group) in enumerate(df.groupby('g'))]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:59:45