Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个图上绘制多个密度_Python_Matplotlib_Pandas - Fatal编程技术网

Python 在一个图上绘制多个密度

Python 在一个图上绘制多个密度,python,matplotlib,pandas,Python,Matplotlib,Pandas,我有一个带有多索引的数据框(支出,组ID): 我可以使用df['coef'].plot(kind='density')获得密度。我想根据多重指数(支出)的外部水平对这些密度进行分组,并将不同支出水平的不同密度绘制到同一个图中 我将如何实现这一点?奖金:用“支出”值标记不同的支出图表 回答 我最初的方法是通过生成一个ax对象并传递该对象来合并不同的KDE,但接受的答案启发我生成一个df,其中组标识符作为列: n = 25 df = pd.DataFrame({'expenditure' : np.

我有一个带有多索引的数据框(支出,组ID):

我可以使用df['coef'].plot(kind='density')获得密度。我想根据多重指数(支出)的外部水平对这些密度进行分组,并将不同支出水平的不同密度绘制到同一个图中

我将如何实现这一点?奖金:用“支出”值标记不同的支出图表

回答

我最初的方法是通过生成一个
ax
对象并传递该对象来合并不同的KDE,但接受的答案启发我生成一个df,其中组标识符作为列:

n = 25
df = pd.DataFrame({'expenditure' : np.random.choice(['foo','bar'], n),
                   'groupid' : np.random.choice(['one','two'], n),
                  'coef' : np.random.randn(n)})
df2 = df[['expenditure', 'coef']].pivot_table(index=df.index, columns='expenditure', values='coef')
df2.plot(kind='kde')

哇,结果比我想象的要困难得多。在概念上似乎很容易,但(再一次)概念和实践确实不同

设置一些玩具数据:

n = 25
df = pd.DataFrame({'expenditure' : np.random.choice(['foo','bar'], n),
                   'groupid' : np.random.choice(['one','two'], n),
                  'coef' : randn(n)})
然后根据
支出进行分组
,迭代每个支出,透视数据,并绘制kde:

gExp = df.groupby('expenditure')
for exp in gExp:
    print exp[0]
    gGroupid = exp[1].groupby('groupid')
    g = exp[1][['groupid','coef']].reset_index(drop=True)
    gpt = g.pivot_table(index = g.index, columns='groupid', values='coef')
    gpt.plot(kind='kde').set_title(exp[0])
    show()
结果:


在绘图之前,需要反复试验才能弄清楚数据必须以数据为中心

这迫使我最终理解了何时使用pivot_table()而不是pivot()
gExp = df.groupby('expenditure')
for exp in gExp:
    print exp[0]
    gGroupid = exp[1].groupby('groupid')
    g = exp[1][['groupid','coef']].reset_index(drop=True)
    gpt = g.pivot_table(index = g.index, columns='groupid', values='coef')
    gpt.plot(kind='kde').set_title(exp[0])
    show()