从pandas dataframe列中推断系列标签和数据以进行绘图

时间:2017-06-21 18:52:28

标签: pandas matplotlib

考虑一个简单的2x2数据集,其中系列标签作为第一列预先添加(“Repo”)

            Repo AllTests Restricted
0      Galactian   1860.0      410.0
1  Forecast-MLib    140.0       47.0

以下是DataFrame列:

p(df.columns)
([u'Repo', u'AllTests', u'Restricted']

所以我们的第一列是字符串/标签,第二列和第三列是数据值。我们希望每个一个系列对应GalactianForecast-MLlib回购。

这似乎是一项常见任务,只需简单地plot DataFrame即可。但是,以下相关问题没有提供任何简单的方法:它基本上抛弃了DataFrame结构知识并手动绘制:  Set matplotlib plot axis to be the dataframe column name

有没有更自然的方式来绘制这些系列 - 这不涉及解构已经很有用的DataFrame,而是将第一列推断为标签,剩下的是系列数据点?

更新以下是一个自包含的代码段

runtimes = npa([1860.,410.,140.,47.])
runtimes.shape = (2,2)

labels = npa(['Galactian','Forecast-MLlib'])
labels.shape=(2,1)
rtlabels = np.concatenate((labels,runtimes),axis=1)
rtlabels.shape = (2,3)

colnames = ['Repo','AllTests','Restricted']
df = pd.DataFrame(rtlabels, columns=colnames)
ps(df)
df.set_index('Repo').astype(float).plot()
plt.show()

这是输出

             Repo AllTests Restricted
0       Galactian   1860.0      410.0
1  Forecast-MLlib    140.0       47.0

使用piRSquared帮助它看起来像这样

enter image description here 所以数据现在显示..但系列和标签交换。将进一步尝试正确排列它们。

另一次更新

flipping the columns/labels,系列会按照需要推出。

改变是:

labels = npa(['AllTests','Restricted'])
..
colnames = ['Repo','Galactian','Forecast-MLlib']

enter image description here

所以更新的代码是

runtimes = npa([1860.,410.,140.,47.])
runtimes.shape = (2,2)

labels = npa(['AllTests','Restricted'])
labels.shape=(2,1)
rtlabels = np.concatenate((labels,runtimes),axis=1)
rtlabels.shape = (2,3)

colnames = ['Repo','Galactian','Forecast-MLlib']
df = pd.DataFrame(rtlabels, columns=colnames)
ps(df)
df.set_index('Repo').astype(float).plot()
plt.title("Restricting Long-Running Tests\nin Galactus and Forecast-ML")
plt.show()

p('df columns', df.columns)
ps(df)

1 个答案:

答案 0 :(得分:1)

Pandas假设您的标签信息在索引和列中。首先设置索引:

df.set_index('Repo').astype(float).plot()

或者

df.set_index('Repo').T.astype(float).plot()