如何使用子图创建Pandas groupby图?

Iva*_*van 7 python plot group-by pandas subplot

我有一个这样的数据框:

     value     identifier
2007-01-01  0.781611      55
2007-01-01  0.766152      56
2007-01-01  0.766152      57
2007-02-01  0.705615      55
2007-02-01  0.032134      56 
2007-02-01  0.032134      57
2008-01-01  0.026512      55
2008-01-01  0.993124      56
2008-01-01  0.993124      57
2008-02-01  0.226420      55
2008-02-01  0.033860      56
2008-02-01  0.033860      57
Run Code Online (Sandbox Code Playgroud)

所以我按标识符进行分组:

df.groupby('identifier')
Run Code Online (Sandbox Code Playgroud)

现在我想在网格中生成子图,每组一个图.我试过了两个

df.groupby('identifier').plot(subplots=True)
Run Code Online (Sandbox Code Playgroud)

要么

df.groupby('identifier').plot(subplots=False)
Run Code Online (Sandbox Code Playgroud)

plt.subplots(3,3)
df.groupby('identifier').plot(subplots=True)
Run Code Online (Sandbox Code Playgroud)

无济于事.我该如何创建图表?

cph*_*wis 11

这是一个包含大量群组(随机假数据)的自动布局,并且grouped.get_group(key)可以向您展示如何做更优雅的情节.

import pandas as pd
from numpy.random import randint
import matplotlib.pyplot as plt


df = pd.DataFrame(randint(0,10,(200,6)),columns=list('abcdef'))
grouped = df.groupby('a')
rowlength = grouped.ngroups/2                         # fix up if odd number of groups
fig, axs = plt.subplots(figsize=(9,4), 
                        nrows=2, ncols=rowlength,     # fix as above
                        gridspec_kw=dict(hspace=0.4)) # Much control of gridspec

targets = zip(grouped.groups.keys(), axs.flatten())
for i, (key, ax) in enumerate(targets):
    ax.plot(grouped.get_group(key))
    ax.set_title('a=%d'%key)
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Zer*_*ero 8

您确实使用pivot来获取identifiersin列,然后绘制

pd.pivot_table(df.reset_index(),
               index='index', columns='identifier', values='value'
              ).plot(subplots=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

而且,输出

pd.pivot_table(df.reset_index(),
               index='index', columns='identifier', values='value'
               )
Run Code Online (Sandbox Code Playgroud)

好像 -

identifier        55        56        57
index
2007-01-01  0.781611  0.766152  0.766152
2007-02-01  0.705615  0.032134  0.032134
2008-01-01  0.026512  0.993124  0.993124
2008-02-01  0.226420  0.033860  0.033860
Run Code Online (Sandbox Code Playgroud)