如何在plt中使用python取消堆栈?
我参考了互联网上的信息 我想画我的数据如何在plt中使用python取消堆栈?,python,pandas,Python,Pandas,我参考了互联网上的信息 我想画我的数据 id time w 5630 39 2018-03-01 841.704067 5631 39 2018-03-02 605.119444 5632 39 2018-03-03 651.337735 5633 39 2018-03-04 595.974252 5634 39 2018-03-05 656.031315 5635 39 2018-03-
id time w
5630 39 2018-03-01 841.704067
5631 39 2018-03-02 605.119444
5632 39 2018-03-03 651.337735
5633 39 2018-03-04 595.974252
5634 39 2018-03-05 656.031315
5635 39 2018-03-06 972.101045
5636 39 2018-03-07 660.659986
5637 39 2018-03-08 1225.648122
.
.
5685 39 2018-04-25 699.347653
5686 39 2018-04-26 516.267288
5687 39 2018-04-27 621.807574
5688 39 2018-04-28 488.903030
5689 39 2018-04-29 790.637525
5690 39 2018-04-30 457.569811
5691 40 2018-03-01 157.636364
5692 40 2018-03-02 138.759563
5693 40 2018-03-03 209.213996
5694 40 2018-03-04 177.255571
5695 40 2018-03-05 155.696106
.
.
5748 40 2018-04-27 133.512968
5749 40 2018-04-28 157.630623
5750 40 2018-04-29 210.996613
5751 40 2018-04-30 120.643963
我执行以下命令:
fig, ax = plt.subplots(figsize=(15,7))
df2.groupby(['time','id']).count()['w'].unstack().plot(ax=ax)
但我的结果很奇怪
我想画成这样:
我刚剪下样品,但我想一次画完。重叠或单独
如何实现下面类似的结果
我真的需要你的帮助。非常感谢。所有工作都很好,但是对于您的数据样本,计数是
1
,因为按列时间和id
以及ech对获取组的大小1
:
print (df2.groupby(['time','id']).count()['w'])
time id
2017-04-03 18:09:04 39 1
2017-04-03 18:16:04 39 1
2017-04-03 18:23:04 39 1
2017-04-03 18:30:04 39 1
2017-04-03 18:37:04 39 1
2017-04-03 18:44:04 40 1
2017-04-03 18:51:04 40 1
2017-04-03 18:58:04 40 1
2017-04-03 19:05:04 40 1
2017-04-03 19:12:04 40 1
Name: w, dtype: int64
然后,对于不成对存在的值,整形后的输出为数据帧,两列分别由1
和NaN
s填充:
df = df2.groupby(['time','id']).count()['w'].unstack()
print (df)
id 39 40
time
2017-04-03 18:09:04 1.0 NaN
2017-04-03 18:16:04 1.0 NaN
2017-04-03 18:23:04 1.0 NaN
2017-04-03 18:30:04 1.0 NaN
2017-04-03 18:37:04 1.0 NaN
2017-04-03 18:44:04 NaN 1.0
2017-04-03 18:51:04 NaN 1.0
2017-04-03 18:58:04 NaN 1.0
2017-04-03 19:05:04 NaN 1.0
2017-04-03 19:12:04 NaN 1.0
如果值仅为日期,则需要将Grouper
按7d
表示一周,或将MS
表示月初的time
列(还将参数fill\u value=0
表示替换NaN
s表示0
):
最后,您的代码如下所示:
fig, ax = plt.subplots(figsize=(15,7))
df2.groupby([pd.Grouper(freq='7d', key='time'),'id'])['w'].count().unstack(fill_value=0).plot(ax=ax)
@@jezrael,可以建议我如何在参考网站上实现类似的功能吗?我创建了一个类似参考网站的样本并执行了它,得到了相同的结果。我想是的,给我一些时间。@Linminxiang-我看不到你的真实数据,所以我的解决方案建议每天计算一次。但是如果数据只持续一天,它就不会绘制任何内容,然后需要将freq=d
更改为freq=1h
或类似的内容。@@jezrael,我已经更新了数据。我的数据是这样的。顺便说一下,刚才提到的代码不能画东西。你能帮我吗?@Linminxiang-是的,我想需要,只需将grouped=df.groupby('a')rowlength=grouped.ngroups/2更改为grouped=df2.groupby('id')rowlength=grouped.ngroups//2
fig, ax = plt.subplots(figsize=(15,7))
df2.groupby([pd.Grouper(freq='7d', key='time'),'id'])['w'].count().unstack(fill_value=0).plot(ax=ax)