Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在plt中使用python取消堆栈?_Python_Pandas - Fatal编程技术网

如何在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)