Pandas如何按每2列分组以日期为x轴绘制各水果对应折线图
实现方案
原有代码存在三个核心问题:
- 条件判断逻辑错误:单个列名不可能同时以
_old和_new结尾,该条件永远为False,不会触发任何绘图逻辑 - 变量使用混乱:代码中
x未提前定义,且直接将绘图返回的axes对象赋值给x,逻辑完全不成立 - 缺少按水果词根分组的逻辑:直接遍历所有列,没有提取相同水果的列名前缀
正确实现代码
我们可以先提取所有唯一的水果名称,再按水果循环生成单独的折线图:
import pandas as pd import matplotlib.pyplot as plt # 提取所有水果名称(排除date列,取列名前缀去重) valid_cols = [col for col in df.columns if col.endswith('_old') or col.endswith('_new')] fruit_list = list(set(col.rsplit('_', 1)[0] for col in valid_cols)) # 每个水果生成一张独立折线图 for fruit in fruit_list: y_cols = [f"{fruit}_old", f"{fruit}_new"] ax = df.plot( kind="line", x="date", y=y_cols, figsize=(8,5), title=f"{fruit}新旧数据趋势对比" ) ax.set_xlabel("日期") ax.set_ylabel("数值") ax.legend(["旧版本数据", "新版本数据"]) # 若需要保存图片到本地可取消下方注释 # plt.savefig(f"./{fruit}_对比图.png") plt.show()
运行后会自动按水果生成独立的折线图,每张图都包含对应水果的新旧两条趋势线,x轴为日期列。
内容的提问来源于stack exchange,提问作者asd
相关产品推荐
相关产品推荐

