Как построить Pandas .groupby () объекты в Seaborn - используя метод цепочки - PullRequest
0 голосов
/ 08 марта 2020

Я был бы очень признателен за любые советы о том, как передать объект Pandas .groupby () в Seaborn

Я пытаюсь построить объект .groupby (), но он выдает мне сообщение об ошибке: ValueError: При использовании всех скалярных значений вы должны передать индекс

gapminder.\
    groupby('year').\
    agg({'pop' : ['sum'],
         'lifeExp' : ['mean']}).\
    reset_index().\
    pipe((sns.relplot, "data"), x = "pop", y = "lifeExp", kind = "scatter").\
    set(xscale = "log")
plt.show()

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Передав лямбду, вы можете вызвать функцию по своему усмотрению:

.pipe(lambda d: sns.relplot(data=d, x="pop", y="lifeExp", kind="scatter"))

Где d представляет ваш DataFrame, переданный в качестве единственного аргумента .pipe.

.
0 голосов
/ 13 марта 2020

Ответу помогает новая функция, добавленная в Pandas в версии 0.25, «Именованная агрегация с .groupby ()». Это позволяет создавать переменные с помощью функции .agg () и выводить их в аккуратный фрейм данных с единообразным индексом, в отличие от многоиндексированного объекта groupby в Pandas <= версия 0.24. Ниже показано, как запрос может быть соединен через Pandas, а также без проблем в Seaborn. </p>

gapminder.\
   groupby('year').\
   agg(pop_sum = ('pop', sum), 
       lifeExp_mean = ('lifeExp', 'mean')).\
   reset_index().\
   pipe((sns.relplot,"data"), x="pop_sum", y="lifeExp_mean", kind="scatter").\
   set(xscale = "log")
plt.show()
...