Создать контурный график из Pandas Groupby Dataframe

У меня есть 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 

Вы видите, a от 0 … 188 и b в каждой группе от некоторого значения до некоторого значения. И как обозначенное Z-значение, отсчет появления пары a / b.

Как получить граф или график тепловой карты из сгруппированных данных?

У меня есть это (просят?):

 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) 

Как получить значения x и y из объекта Groupby и построить контур?

  • что является лучшим / простым в использовании библиотекой шифрования в python
  • Итерация по результату PyoDBC без fetchall ()
  • Пядев - дважды вызывает функцию
  • Есть ли разница в вычислениях для Numpy vs Pandas?
  • Запустить скрипт Python в выбранном файле
  • Асинхронные обратные вызовы и генераторы Python
  • Можно ли использовать pip в Python Tools в Visual Studio?
  • Как перебрать начальные размеры массива Numpy?
  • 2 Solutions collect form web for “Создать контурный график из Pandas Groupby Dataframe”

    Большое спасибо! Моя ошибка заключалась в том, что я не понимал, что мне нужно применить некоторую функцию к файлу данных groupby, например .size() , чтобы работать с ним …

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

    дает мне

     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 

    С этим и вашей помощью CT Zhu я мог бы сделать

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

    и это, наконец, дало мне правильные значения для

     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); 

    что приводит к этому красивому контуру:

    введите описание изображения здесь

    Добро пожаловать в SO.

    Понятно, что для каждого из ваших уровней «a» количество уровней «b» не одинаково, поэтому я предлагаю следующее решение:

     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> 

    введите описание изображения здесь

    Python - лучший язык программирования в мире.