Python循环绘制多图问题:按ClientID筛选数据绘图失败
按ClientID单独生成对应图表
你的问题出在循环时没有筛选对应ClientID的子数据集,dfT1[:]仍然调用的是完整数据集,所以每张图都会显示全部数据。以下是两种修正方案:
方案一:直接遍历分组对象(推荐)
利用groupby对象可直接遍历的特性,每次取出对应ClientID的子数据进行绘图:
import matplotlib.pyplot as plt # 按ClientID分组 clients = dfT1.groupby('ClientID') # 遍历每个分组,client_id是分组键,group是对应ClientID的子数据集 for client_id, group in clients: group.plot(x='Dates', y=['DWLTActual', 'Weight'], figsize=(10,5), grid=True, title=f'ClientID: {client_id}') plt.show()
方案二:通过键筛选数据
保留你原来的键循环逻辑,通过布尔索引筛选出当前ClientID的行:
import matplotlib.pyplot as plt clients = dfT1.groupby('ClientID') keys = clients.groups.keys() for i in keys: # 筛选当前ClientID对应的所有数据 client_data = dfT1[dfT1['ClientID'] == i] client_data.plot(x='Dates', y=['DWLTActual', 'Weight'], figsize=(10,5), grid=True, title=f'ClientID: {i}') plt.show()
两种方案都能让每张图表只展示对应ClientID的数据,添加标题还能直观区分不同客户端的图表。
内容的提问来源于stack exchange,提问作者Aodhan
相关产品推荐
相关产品推荐

