Create contour graph from Pandas Groupby Dataframe

I have the following Pandas Dataframe:

In [66]: hdf.size() Out[66]: ab 0 0.0 21004 0.1 119903 0.2 186579 0.3 417349 0.4 202723 0.5 100906 0.6 56386 0.7 6080 0.8 3596 0.9 2391 1.0 1963 1.1 1730 1.2 1663 1.3 1614 1.4 1309 ... 186 0.2 15 0.3 9 0.4 21 0.5 4 187 0.2 3 0.3 10 0.4 22 0.5 10 188 0.0 11 0.1 19 0.2 20 0.3 13 0.4 7 0.5 5 0.6 1 Length: 4572, dtype: int64 

You see, a from 0 ... 188 and b in each group from a certain value to a certain value. And as the indicated Z-value, the counter of the appearance of the a / b pair.

How to get a countour or heatmap chart from a grouped data frame?

I have this (asking?):

 numcols, numrows = 30, 30 xi = np.linspace(0, 200, numcols) yi = np.linspace(0, 6, numrows) xi, yi = np.meshgrid(xi, yi) zi = griddata(?, ?, hdf.size().values, xi, yi) 

How to get x and y values ​​from a Groupby object and build a path?

+6
source share
2 answers

Thanks a lot! My mistake was that I did not understand that I needed to apply some function to the groupby data file, for example .size() , to work with it ...

 hdf = aggdf.groupby(['a','b']).size() hdf 

gives me

 ab 1 -2.0 1 -1.9 1 -1.8 1 -1.7 2 -1.6 5 -1.5 10 -1.4 9 -1.3 21 -1.2 34 -1.1 67 -1.0 65 -0.9 94 -0.8 180 -0.7 242 -0.6 239 ... 187 0.4 22 0.5 10 188 -0.6 2 -0.5 2 -0.4 1 -0.3 2 -0.2 5 -0.1 10 -0.0 18 0.1 19 0.2 20 0.3 13 0.4 7 0.5 5 0.6 1 Length: 8844, dtype: int64 

With this and with your help CT Zhu, I could do

 hdfreset = hdf.reset_index() hdfreset.columns = ['a', 'b', 'occurrence'] hdfpivot=hdfreset.pivot('a', 'b') 

and it finally gave me the right values

 X=hdfpivot.columns.levels[1].values Y=hdfpivot.index.values Z=hdfpivot.values Xi,Yi = np.meshgrid(X, Y) plt.contourf(Yi, Xi, Z, alpha=0.7, cmap=plt.cm.jet); 

which leads to this beautiful outline:

enter image description here

+10
source

Welcome to SO.

It is clear that for each level "a" the numbers of levels "b" do not match, so I propose the following solution:

 In [44]: print df #an example, you can get your dataframe in to this by rest_index() ab value 0 0 1 0.336885 1 0 2 0.276750 2 0 3 0.796488 3 1 1 0.156050 4 1 2 0.401942 5 1 3 0.252651 6 2 1 0.861911 7 2 2 0.914803 8 2 3 0.869331 9 3 1 0.284757 10 3 2 0.488330 [11 rows x 3 columns] In [45]: #notice that you will have some 'NAN' values df=df.pivot('a', 'b', 'value') In [46]: X=df.columns.values Y=df.index.values Z=df.values x,y=np.meshgrid(X, Y) plt.contourf(x, y, Z) #the NAN will be plotted as white spaces Out[46]: <matplotlib.contour.QuadContourSet instance at 0x1081385a8> 

enter image description here

+5
source

Source: https://habr.com/ru/post/970300/


All Articles