Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 Group By year对象逐年绘制_Python_Matplotlib_Pandas - Fatal编程技术网

Python Pandas Group By year对象逐年绘制

Python Pandas Group By year对象逐年绘制,python,matplotlib,pandas,Python,Matplotlib,Pandas,我想在12月至1月的12个月轴上绘制6年12个月的数据 import pandas as pd import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt df = pd.Series(np.random.randn(72), index=pd.date_range('1/1/2000', periods=72, freq='M')) grouped = df.groupby(df.index.map(

我想在12月至1月的12个月轴上绘制6年12个月的数据

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

df = pd.Series(np.random.randn(72), index=pd.date_range('1/1/2000', periods=72, freq='M'))
grouped = df.groupby(df.index.map(lambda x: x.year))

grouped.plot()


因此,我每年都会在这两条线之间获得突破。然而,我想做的是让这一年彼此重叠。有什么简单而干净的方法吗?

可能还有比这更好的方法:

In [44]: vals = df.groupby(lambda x: (x.year, x.month)).sum()

In [45]: vals
Out[45]: 
(2000, 1)    -0.235044
(2000, 2)    -1.196815
(2000, 3)    -0.370850
(2000, 4)     0.719915
(2000, 5)    -1.228286
(2000, 6)    -0.192108
(2000, 7)    -0.337032
(2000, 8)    -0.174219
(2000, 9)     0.605742
(2000, 10)    1.061558
(2000, 11)   -0.683674
(2000, 12)   -0.813779
(2001, 1)     2.103178
(2001, 2)    -1.099845
(2001, 3)     0.366811
...
(2004, 10)   -0.905740
(2004, 11)   -0.143628
(2004, 12)    2.166758
(2005, 1)     0.944993
(2005, 2)    -0.741785
(2005, 3)     1.531754
(2005, 4)    -1.106024
(2005, 5)    -1.925078
(2005, 6)     0.400930
(2005, 7)     0.321962
(2005, 8)    -0.851656
(2005, 9)     0.371305
(2005, 10)   -0.868836
(2005, 11)   -0.932977
(2005, 12)   -0.530207
Length: 72, dtype: float64
现在将
vals
上的索引更改为
MultiIndex

In [46]: vals.index = pd.MultiIndex.from_tuples(vals.index)

In [47]: vals.head()
Out[47]: 
2000  1   -0.235044
      2   -1.196815
      3   -0.370850
      4    0.719915
      5   -1.228286
dtype: float64
然后取消堆叠并打印:

In [48]: vals.unstack(0).plot()
Out[48]: <matplotlib.axes.AxesSubplot at 0x1171a2dd0>
[48]中的
:vals.unstack(0.plot())
出[48]:

我喜欢它。我现在有两个问题。如何控制x轴,使其不包含0?我想删除0-1之间的死区。还有,为什么要在df.groupby(lambda x:(x.year,x.month)).sum()中使用sum调用呢?我知道它不会更改值,所以看起来不需要,但我认为它可能与删除日期索引有关?谢谢Douglas@user3055920数据帧的
plot
方法返回matplotlib
Axes
对象。如果你做了
ax=df.plot()
,你就可以调用
ax.set\u xlim(left=1)
——或者类似的东西,做这种图有什么进展吗?这对于一个非常普通的任务来说有点麻烦,如果你有空白,你会有很多只包含NaN的列。有人能解释一下为什么在lambda函数的末尾使用.sum()吗?