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

3

我希望可以从一个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个回答

2

它能工作吗?

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

如果想正确显示日期,可以尝试以下方法:
df.index=pd.to_datetime(df.index,format='%Y%m')

1
为了回答您的问题,我在这里查看了一个笔记本:http://nbviewer.ipython.org/github/ericmjl/Stack-Overflow-Answers/blob/master/20141020%20Complex%20Pandas%20Plotting/Untitled0.ipynb 核心思想是进行分组,然后仅绘制您感兴趣的列。
以下是代码:
df = pd.read_csv("data.csv")
df.groupby("to_network")['count'].plot()

此外,请确保添加Daniele的贡献,其中您可以正确格式化索引:
df.index=pd.to_datetime(df.index,format='%Y%m')

为了归属,我除了在这里引用她的回答外还给予了点赞。

希望这回答解决了你的问题;如果是的话,请接受这个回答!


1

pandas中plot的默认行为是使用索引作为x轴,并针对每列绘制一条线。因此,您需要重塑数据帧以反映该结构。您可以执行以下操作:

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

这将使您的数据框(即ggplot样式的长格式)转换为一个框架,从而使pandas默认的绘图行为产生所需的结果,即每种网络类型一条线,索引为x轴,计数为值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接