Редактирование, чтобы добавить объяснение:
Я не мог придумать лучшего решения, чтобы можно было получить суммы, аналогичные вашей Excel pivot_table.То, что я сделал, из df
фрейма данных, я создал две сводные таблицы df1
, df2
, переключая столбцы и индекс.Затем я использовал pd.concat
.pd.concat definition Объединение объектов pandas вдоль определенной оси с необязательной логикой установки вдоль других осей. , чтобы объединить два кадра данных.Ссылка здесь
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html#pandas-concat
Так что, если вы запустите этот df_final = pd.concat([df2,df1],axis=0,sort=True)
вместо строки 4, вы увидите, что он просто объединен по столбцам.
Тогда groupby будетв некоторой степени похож на сводную, Группировать ряды с помощью картографа (функция dict или key, применять данную функцию к группе, возвращать результат в виде ряда) или с помощью ряда столбцов. Ссылка здесь https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html#pandas-dataframe-groupby
Поскольку pd.concat выдает по 2 строки в каждой, groupby суммирует эти строки вместе, чтобы получить окончательный кадр данных
Original
Должен быть лучший способ сделать это, но этот метод кажетсяработать.df = pd.DataFrame ({'l1': ['a', 'b', 'c', 'c', 'd'], 'l2': ['d', 'e', 'f','e', 'a'], 'value': [1000,2000,4500,500,200]}) df1 = df.pivot_table (index = 'l2', column = 'l1', values = 'value') df2 =df.pivot_table (index = 'l1', columns = 'l2', values = 'value') df_final = pd.concat ([df2, df1], axis = 0, sort = True) .reset_index (). groupby ('index '). sum () min = df [' value ']. max () max = df [' value ']. min () cmap = sns.cubehelix_palette (as_cmap = True, light = .5) sns.heatmap (df_final, cmap = cmap, vmin = min, vmax = max, mask = df_final.isnull (), ширина линий = .008)
![enter image description here](https://i.stack.imgur.com/OdCsk.png)