如何在 Seaborn 中绘制 Pandas .groupby() 对象 - 使用方法链

How to plot Pandas .groupby() objects in Seaborn - using method chaining

如果有任何关于如何将 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()

传递一个lambda,然后你就可以随意调用函数了:

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

其中 d 代表您的 DataFrame,作为唯一参数整体传递给 .pipe

答案得益于 0.25 版 Pandas "Named aggregation with .groupby()" 中添加的一项新功能。这允许通过 .agg() 函数创建变量,并输出到具有统一索引的整洁数据帧,而不是 Pandas <= 0.24 版本中的多索引 groupby 对象。 下面显示了如何通过 Pandas 链接查询并无缝地进入 Seaborn。

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