繁体   English   中英

在seaborn图中分组和均值

[英]Group by and mean inside seaborn plot

我想知道如何group bymean seaborn 图中的值。 是否有一个选项来做这个df.groupby('month')['temperature'].mean().index df.groupby('month')['temperature'].mean().values在一个seaborn图中没有生成一个新的数据df2 = df.groupby('month')['temperature'].mean()df2 = df.groupby('month')['temperature'].mean()

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

d = {'id': [1, 2, 3, 4, 5], 'month': [1, 2, 3, 4, 2], 'temperature': [20, 40, 50, 60, 20]}
df = pd.DataFrame(data=d)

x = df.groupby('month')['temperature'].mean().index
y = df.groupby('month')['temperature'].mean().values


plt.plot(x,y)
plt.show()

 # With the below code I got the desired output 

df2 = df.groupby('month')['temperature'].mean()
sns.lineplot(x=df2.index, y=df2.values,  data=df2)

我不确定您所说的“分组依据并表示 seaborn 图中的值”是什么意思。

您可能的意思是“我想做那个操作,但不想将其输出分配给变量”,在这种情况下,您可以将其与分配给 seaborn 的data参数内联,并通过他们的索引/列引用名称。 但是要做到这一点,您需要将 groupby 的输出(pandas Series )转换回数据帧:

sns.lineplot(
    x="month", y="temperature",
    data=df.groupby('month')['temperature'].mean().to_frame(),  # or .reset_index()
)

但是,如果您想从 x 变量获取索引而 y 变量获取值的系列中绘制线图,您可以将Series传递给data=而不必费心分配x= , y=

sns.lineplot(data=df.groupby('month')['temperature'].mean(), linestyle="--")

你可能会问的另一件事是“如果我给 seaborn 原始数据框,我可以让它为我做 groupby/aggregation 吗?” 在这种情况下,答案是肯定的,这是默认行为/最简单的调用:

sns.lineplot(data=df, x="month", y="temperature", ci=None, linestyle=":")

这些都产生相同的结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM