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

转置pandas DataFrame后如何按分组绘制月度折线图?

DataFrame结构调整及绘图解决方案

问题根因

你当前转置后的DataFrame属于宽表结构,且列名出现异常浮点数(而非预期的日期字符串/日期格式),是因为转置前原始表的行索引未正确设置为日期类型,转置后日期被强制转为浮点数作为列名,无法直接识别为时间序列用于绘图。

调整步骤

  • 第一步:修正列名并语义化字段
    先将存储产品的列重命名,同时修正日期列名:
# 重命名产品列,按实际日期跨度生成正确的日期列名
df.columns = ['product'] + pd.date_range(start='2020-01-01', periods=100, freq='MS').strftime('%Y-%m-%d').tolist()

如果你的原始日期序列有其他存储路径,直接替换上述日期生成逻辑即可。

  • 第二步:转换为绘图友好的长表结构(推荐)
    使用melt方法将宽表转为tidy结构,同时统一转换日期字段格式:
# 转为长表
df_long = df.melt(id_vars='product', var_name='date', value_name='sales_value')
# 日期列转datetime类型,保证x轴排序正确
df_long['date'] = pd.to_datetime(df_long['date'])
  • 第三步:绘制折线图
    可以直接用seaborn或者pandas内置绘图函数生成目标图表:
import seaborn as sns
import matplotlib.pyplot as plt

# 方法1:基于长表用seaborn绘图
plt.figure(figsize=(12, 6))
sns.lineplot(data=df_long, x='date', y='sales_value', hue='product', marker='o')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 方法2:不想转长表可以直接基于修正后的宽表绘图
df.set_index('product').T.plot(figsize=(12,6), marker='o', rot=45)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:30:03