我想从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'书,但他们似乎并不复杂。
答案 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轴并计为值。