我有一个看起来像这样的数据集。
Date Name High Value
2017-12-31 Bitcoin 14377.40 18723.76
2017-12-30 Bitcoin 14681.90 18766.88
2017-12-29 Bitcoin 15279.00 18755.70
2017-12-28 Bitcoin 15888.40 18820.54
... ... ... ...
2017-01-08 CannaCoin 0.01 0.02
2017-01-07 CannaCoin 0.01 0.02
2017-01-06 CannaCoin 0.01 0.02
2017-01-05 CannaCoin 0.02 0.01
Date是索引列,采用日期时间格式。我的数据集很大,并且在Name
column中有多个项目。日期范围从年初到结束。此外,并非所有项目都具有相同的长度。大多数应该在年底完成,但它们不一定从一开始就开始,它们可以在以后开始。
我想做的是,按照Name
values分组,并为每个在同一图表/图上创建一个单独的行。 Value
应该在y轴上。
因为我习惯了R,我所做的是:df.groupby("Name")["Value"].plot()
我得到的是一个警告:
UserWarning: Attempting to set identical left==right results in singular transformations; automatically expanding. left=17531.0, right=17531.0 'left=%s, right=%s') % (left, right))
作为可观察的,一半的值丢失,因为它们在绘图区域之外,日期是降序而不是升序,并且一半的图是空的。
我该如何解决这个问题,以便整个情节可见,日期顺序正确?
您可以在“名称”上进行旋转,然后将数据框传递给绘图。
pd.pivot_table(data=df, values="Value",columns="Name",index="Date").plot()
例:
In[]:
idx = ["2017-12-28","2017-12-29","2017-12-30","2017-12-31"] * 2
name = ['Bitcoin'] * 4 + ['CannaCoin'] * 4
vals = np.random.rand(8) * 1000
df = pd.DataFrame({"Date":idx, "Name":name, "Value":vals})
print(df)
Out[]:
Date Name Value
0 2017-12-28 Bitcoin 788.547631
1 2017-12-29 Bitcoin 572.695484
2 2017-12-30 Bitcoin 661.859195
3 2017-12-31 Bitcoin 205.473883
4 2017-12-28 CannaCoin 270.291858
5 2017-12-29 CannaCoin 683.827404
6 2017-12-30 CannaCoin 447.808772
7 2017-12-31 CannaCoin 616.927833
In[]:
pd.pivot_table(data=df, values="Value",columns="Name",index="Date").plot()