使用Pandas / Matplotlib进行复杂的数据框绘图

时间:2014-10-20 17:14:43

标签: python pandas

我想从pandas数据框创建一个如下所示的时间序列图:

*sample of a simplified version of my dataframe:*

index    to_network    count
201401   net_1         100
201401   net_2         200
201401   net_3         150
201402   net_1         300
201402   net_2         250
201403   net_1         175

最终,最终图表应该是一个时间序列线图(x轴是索引,y轴是'计数'),有多条线,每条线都是一个网络。 to_network列(例如,一行应为net_1)。

我一直在阅读用于数据分析的python'书,但他们似乎并不复杂。

3 个答案:

答案 0 :(得分:2)

有效吗?

df.groupby('to_network').count.plot()

如果您想正确显示日期,可以尝试:

df.index=pd.to_datetime(df.index,format='%Y%m')

答案 1 :(得分:1)

要回答您的问题,我在此处查了一个笔记本:http://nbviewer.ipython.org/github/ericmjl/Stack-Overflow-Answers/blob/master/20141020%20Complex%20Pandas%20Plotting/Untitled0.ipynb

核心思想是做groupby,然后只绘制您感兴趣的列。

代码也粘贴在下面:

df = pd.read_csv("data.csv")
df.groupby("to_network")['count'].plot()

另外,请务必添加Daniele的贡献,正确格式化索引:

df.index=pd.to_datetime(df.index,format='%Y%m')

对于归因,除了在此引用之外,我还对她的答案进行了投票。

我希望这能回答这个问题;如果确实如此,请接受答案!

答案 2 :(得分:1)

pandas中绘图的默认行为是将索引用作x轴并绘制每列一行。因此,您希望重塑数据框以镜像该结构。您可以执行以下操作:

df.pivot_table(index='index', columns = 'to_network', values = 'count', aggfunc = 'sum').plot()

这会将您的df(长格式ala ggplot样式)转换为一个框架,pandas默认的绘图行为将为每个网络类型产生一行所需的结果,索引为x轴并计为值。