Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Python Pandas:将多个时间序列数据帧绘制到单个绘图中_Python_Pandas_Matplotlib_Pandas Groupby - Fatal编程技术网

Python Pandas:将多个时间序列数据帧绘制到单个绘图中

Python Pandas:将多个时间序列数据帧绘制到单个绘图中,python,pandas,matplotlib,pandas-groupby,Python,Pandas,Matplotlib,Pandas Groupby,我有以下数据帧: time Group blocks 0 1 A 4 1 2 A 7 2 3 A 12 3 4 A 17 4 5 A 21 5 6 A 26 6 7 A 33

我有以下数据帧:

     time      Group      blocks
0     1        A           4
1     2        A           7
2     3        A           12
3     4        A           17
4     5        A           21 
5     6        A           26
6     7        A           33
7     8        A           39
8     9        A           48
9     10       A           59
    ....        ....          ....
36     35      A           231
37     1       B           1
38     2       B           1.5
39     3       B           3
40     4       B           5
41     5       B           6
    ....        ....          ....
911    35      Z           349
这是一个包含多个时间序列数据的数据帧,从
min=1
max=35
。每个
组都有这样的时间序列

我想根据1到35的x轴绘制每个时间序列A到Z。y轴每次都是

我在考虑使用类似于一个动画的东西,它可以将每个系列相互对应。每个“色调”将被设置为不同的组。(欢迎提出其他想法。)

我的问题是:如何格式化此数据帧以绘制多个系列?列是否应为
GroupA
GroupB

如何使数据帧的格式为:

time GroupA blocksA GroupsB blocksB GroupsC blocksC....
如图所示,这是Andrews绘图的正确格式吗

编辑

如果我尝试:

df.groupby('Group').plot(legend=False)
x轴完全不正确。所有时间序列应在0到35之间绘制,全部在一个序列中


我如何解决这个问题

看看这些变体。第一个是安德鲁斯曲线,第二个是多线图,按一列
分组。数据框
数据
包括三列
温度
日期
,和
月份

import pandas as pd
import statsmodels.api as sm
import matplotlib.pylab as plt
from pandas.tools.plotting import andrews_curves

data = sm.datasets.get_rdataset('airquality').data
fig, (ax1, ax2) = plt.subplots(nrows = 2, ncols = 1)
data = data[data.columns.tolist()[3:]] # use only Temp, Month, Day

# Andrews' curves
andrews_curves(data, 'Month', ax=ax1)

# multiline plot with group by
for key, grp in data.groupby(['Month']): 
    ax2.plot(grp['Day'], grp['Temp'], label = "Temp in {0:02d}".format(key))
plt.legend(loc='best')    
plt.show()
绘制安德鲁斯曲线时,数据被保存到一个函数中。这意味着Andrews的曲线由紧密相连的函数表示,表明相应的数据点也将紧密相连


您可以将数据重新构造为透视表:

df.pivot_table(index='time',columns='Group',values='blocks',aggfunc='sum').plot()

要在数据帧上调用andrews_曲线,必须标记要分组的值。试试安德鲁斯曲线(df,'Group')
按列分组
Group
@Serenity这真是一团糟。x轴不是从1到35,我也不确定y轴是什么。你如何改变这个?安德鲁斯的曲线在[-pi;+pi]之间。请阅读:@Serenity是否可以更改x轴范围?
ax=plt.gca();ax_set_xlim(1,35)
见上面的编辑;我的“groupby”绘图有问题。我将此代码用于我的数据,并出现以下错误。有人能帮我吗?TypeError:输入类型不支持ufunc“true_divide”,并且无法根据强制转换规则“safe”将输入安全强制为任何受支持的类型