Python 按组打印列值,但颜色基于另一列

Python 按组打印列值,但颜色基于另一列,python,pandas,matplotlib,Python,Pandas,Matplotlib,数据帧的结构松散,如下所示 ID Price ColorID Datetime 2020-10-30 07:21:00.074000+00:00 131310 13.13 0 2020-10-30 07:21:00.485128+00:00 5250455 13.02 1 2020

数据帧的结构松散,如下所示

                                       ID  Price  ColorID
Datetime                                                 
2020-10-30 07:21:00.074000+00:00   131310  13.13        0
2020-10-30 07:21:00.485128+00:00  5250455  13.02        1
2020-10-30 07:21:00.485000+00:00   130210  13.02        0
2020-10-30 07:21:00.486000+00:00   130110  13.01        0
2020-10-30 07:21:00.486000+00:00   130310  13.03        0
2020-10-30 07:21:00.488000+00:00   130310  13.03        0 
我试图绘制每个ID的价格级数,用colorID定义要绘制的颜色

如果我不使用任何颜色,下面的命令将为我提供我要查找的绘图,但带有内置的配色方案,而不是我需要的配色方案

test.groupby("ID").Price.plot(drawstyle="steps-post", marker="d", linewidth=2)
相同的ID将保留相同的colorID,所以第一次尝试是先创建一个分组对象,然后引用该分组对象以尝试获得颜色方案

grouped = test.groupby("ID")
colors = {0: "b", 1: "r"}
grouped.Price.plot(drawstyle="steps-post", marker="d", linewidth=2, c=colors[grouped.ColorID.last()])
出现以下错误:

TypeError:“Series”对象是可变的,因此无法对其进行散列

而试图通过

grouped.Price.plot(drawstyle="steps-post", marker="d", linewidth=2,c=np.where(grouped.ColorID==0,"b","r"))
将尝试将颜色数组读取为RGB通道,从而导致


ValueError:无效的RGBA参数:array('r',dtype='我知道您对
for
循环犹豫不决,但这并不是一件坏事。它为您提供了对绘图外观的更多控制。此外,我怀疑您是否能通过
groupby().plot()获得任何矢量化

因此
循环如下所示:

colors = {0: "b", 1: "r"}

grouped = test.groupby("ID")

fig, ax = plt.subplots()
for k, g in grouped:
    color = colors[g['ColorID'].iloc[0]]
    g.Price.plot(drawstyle="steps-post", marker="d", 
                 linewidth=2, c=color,
                 label=k, ax=ax)

ax.legend()
输出:


无论如何,在内部使用for循环可能是对的,我应该在自己的控制下而不是在引擎盖下显式地使用它。谢谢。但是,以子地块的方式使用它的一个问题是,如果我想在绘图中签入我正在查看的ID,我实际上无法进行悬停注释。@Uvar这只是我的usual绘图方式。您可以跳过所有
子绘图
相关代码。