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

如何转换DataFrame并用Seaborn/Matplotlib绘制特朗普当选前后多组折线图?

宽格式DataFrame转长格式并绘制多折线图解决方案

一、数据格式转换(核心步骤)

你的核心问题是将宽格式数据转为Seaborn/Matplotlib适配的长格式(tidy data),用Pandas的melt()方法就能快速实现。假设你的原始DataFrame结构如下:

product_group_codebefore_Trump_valueafter_Trump_value
A100120
B8095
.........

执行以下代码完成转换:

import pandas as pd

# 替换为你的实际DataFrame名称
df_long = df.melt(
    id_vars="product_group_code",  # 保留分组标识列
    var_name="time_period",       # 生成的时间阶段列名
    value_name="value"            # 生成的数值列名
)

# 可选:简化时间阶段的名称(去掉_value后缀)
df_long["time_period"] = df_long["time_period"].str.replace("_value", "")

转换后的长格式DataFrame结构如下:

product_group_codetime_periodvalue
Abefore_Trump100
Aafter_Trump120
Bbefore_Trump80
Bafter_Trump95
.........

二、绘制多折线图

方法1:用Seaborn快速绘制

Seaborn的lineplot可以直接按product_group_code分组绘制折线,代码简洁:

import seaborn as sns
import matplotlib.pyplot as plt

# 设置绘图风格
sns.set_style("whitegrid")

# 创建画布
plt.figure(figsize=(10, 6))

# 绘制108条折线,按产品组分组
sns.lineplot(
    data=df_long,
    x="time_period",
    y="value",
    hue="product_group_code",
    legend=False,  # 108条线的图例无意义,直接关闭
    alpha=0.5      # 增加透明度,缓解线条重叠问题
)

# 设置轴标签和标题
plt.xlabel("时间阶段")
plt.ylabel("数值")
plt.title("各产品组特朗普当选前后数值变化")

plt.show()

方法2:用Matplotlib循环绘制(更灵活)

如果需要对单条线做个性化设置,可通过循环实现:

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))

# 遍历每个产品组
for group in df["product_group_code"].unique():
    group_data = df_long[df_long["product_group_code"] == group]
    plt.plot(group_data["time_period"], group_data["value"], alpha=0.5)

plt.xlabel("时间阶段")
plt.ylabel("数值")
plt.title("各产品组特朗普当选前后数值变化")
plt.show()

注意事项

  • 如果原始DataFrame的列名不是before_Trump_value/after_Trump_value,请对应调整melt()的参数和后续字符串替换逻辑。
  • 108条线不可避免会重叠,调整alpha(透明度)是最有效的缓解方式。
  • 若需要重点展示特定产品组,可单独提取该组数据,用不同颜色/线宽重新绘制在顶层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:02:30