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

如何在Seaborn绘图中直接实现group by与mean操作无需生成新DataFrame

问题解答

你想要的操作完全可以实现,不需要提前将分组聚合结果赋值为新的DataFrame/Series对象再传入Seaborn绘图接口。

Seaborn所有绘图接口的x、y参数都支持直接传入Pandas Index、Numpy数组、列表这类可迭代序列,data参数也支持直接传入临时计算得到的Series对象,不需要提前赋值给变量。


写法1:直接传入index和values(不适合超大数据集)

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

d = {'id': [1, 2, 3, 4, 5], 'month': [1, 2, 3, 4, 2], 'temperature': [20, 40, 50, 60, 20]}
df = pd.DataFrame(data=d)

# 无需定义中间变量,直接传入分组计算结果
sns.lineplot(
    x=df.groupby('month')['temperature'].mean().index,
    y=df.groupby('month')['temperature'].mean().values
)
plt.show()

注意:该写法会执行两次groupby聚合计算,数据量较大时会产生不必要的性能开销。


写法2:直接传入聚合后的Series(更简洁高效)

df.groupby('month')['temperature'].mean()本身返回的就是一个以month为索引的Series对象,Seaborn的绘图接口可以直接识别该结构,默认取索引为x轴、取值为y轴,代码可以简化为:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

d = {'id': [1, 2, 3, 4, 5], 'month': [1, 2, 3, 4, 2], 'temperature': [20, 40, 50, 60, 20]}
df = pd.DataFrame(data=d)

# 只执行一次groupby计算,无需中间变量
sns.lineplot(data=df.groupby('month')['temperature'].mean())
plt.show()

这个写法只执行一次分组聚合,性能和提前赋值中间变量的写法完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:06:03