Python如何基于DataFrame字符串变量分组绘制多序列折线图
解决方案
1. 数据结构说明
你当前使用的是标准的长表(Tidy Data)结构,完全不需要转换为几百个字段的宽表就可以直接绘图,反而长表更适合分组、筛选等批量处理逻辑,是Python数据分析的推荐结构。
2. 直接基于长表绘图的代码(以seaborn+matplotlib为例)
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 先确保日期列是datetime格式(你的数据已经符合要求) data['Date'] = pd.to_datetime(data['Date']) # 绘制Share_price走势 plt.figure(figsize=(12,6)) sns.lineplot(data=data, x='Date', y='Share_price', hue='Share', marker='o') plt.title('2021年各股票价格走势') plt.xlabel('日期') plt.ylabel('股票价格') plt.grid(alpha=0.3) plt.show() # 绘制VX走势 plt.figure(figsize=(12,6)) sns.lineplot(data=data, x='Date', y='VX', hue='Share', marker='o') plt.title('2021年各股票VX指标走势') plt.xlabel('日期') plt.ylabel('VX值') plt.grid(alpha=0.3) plt.show()
上述代码会自动按Share字段的不同取值分组,给不同股票分配不同颜色的折线,完全满足你的需求,不需要提前做字段拆分。
3. 可选:如需转宽表的操作方法
如果后续你确实需要宽表结构用于其他处理,可以用pivot方法实现,不会生成300多个杂乱的字段,结构会很清晰:
# 以日期为索引,股票代码为列,同时保留两个指标的宽表 wide_df = data.pivot(index='Date', columns='Share', values=['Share_price', 'VX']) # 查看转换后的列名 print(wide_df.columns) # 输出会是 MultiIndex 格式:[('Share_price', 'aapl'), ('Share_price', 'amzn'), ('Share_price', 'nflx'), ('VX', 'aapl'), ...]
如果要获取单只股票的价格,直接用wide_df['Share_price']['aapl']即可,比单独生成几百个独立字段的可读性和可维护性高很多。
内容的提问来源于stack exchange,提问作者Ballongknutte
相关产品推荐
相关产品推荐

