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

如何在seaborn factorplot中分组数据?能否仅用其合并4个月数据?

能不能仅靠factorplot实现每4个月合并分组?

答案是不行。factorplot(现在Seaborn官方更推荐用catplot替代它,因为前者已经被标记为过时了)的核心是基于你传入的x列的现有分类值来绘制图表,它本身没有内置的时间分组聚合功能——你得先对数据做预处理,把年月数据转换成每4个月的分组,再喂给绘图函数。

下面是具体的实现步骤:

1. 先把年月列转成时间格式

首先确保你的CREATED_AT1是datetime类型,如果还不是的话,先做转换:

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

df_kw_mentions['CREATED_AT1'] = pd.to_datetime(df_kw_mentions['CREATED_AT1'])

2. 生成每4个月的分组并聚合数据

我们需要先把数据按每4个月+KW分组,计算每个分组的总count。这里用pd.Grouper来处理时间分组最方便:

# 按每4个月和KW分组,聚合count的总和
grouped_df = df_kw_mentions.groupby(
    [pd.Grouper(key='CREATED_AT1', freq='4M'), 'KW']
)['count'].sum().reset_index()

# 把时间分组转换成易读的标签,比如"2020-01 to 2020-04"
grouped_df['4month_period'] = grouped_df['CREATED_AT1'].dt.strftime('%Y-%m') + ' to ' + \
    (grouped_df['CREATED_AT1'] + pd.DateOffset(months=3)).dt.strftime('%Y-%m')

3. 用catplot(或factorplot)绘制图表

现在用处理好的分组数据绘图,这里推荐用catplot(factorplot用法完全一样,只是函数名不同):

sns.set_style("white")
g = sns.catplot(
    x="4month_period", y="count", hue='KW', 
    data=grouped_df, height=5, aspect=2, 
    palette="GnBu_d", kind='bar'  # kind参数可以选你需要的图表类型,比如point、bar等
)
plt.xticks(rotation=45, ha='right')  # 旋转X轴标签并右对齐,更易读
g.set(xlabel='4-Month Period', ylabel='Count')
plt.tight_layout()  # 自动调整布局,避免标签被截断
plt.show()

补充说明

如果你坚持要用factorplot,只需要把上面的sns.catplot换成sns.factorplot就行,但还是建议迁移到catplot——Seaborn官方已经不再对factorplot做更新维护了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:48