在 Titanic 数据集上使用 groupby 和 unstack 后,无法绘制一系列计数图

After using groupby and unstack on Titanic dataset, can't graph a series of countplots

所以我的原始数据框 Cabin_hunt 看起来像这样:

      Fare     Cabin    Pclass Ticket  
583  40.1250   A10       1     13049   
208  27.7208   A11       1     17613   
475  52.0000   A14       1     110465   
556  39.6000   A16       1     11755   
331  29.7000   A18       1     17580   
284  26.0000   A19       1     113056   
599  56.9292   A20       1     17485   
737  512.3292  B101      1     17755   
815   0.0000   B102      1    112058   
215  42.5000   B11       1    113038   
329  57.9792   B18       1    111361   
523  57.9792   B18       1    111361   
269  135.6333  C99       1    17760   
97   63.3583   D10       1    17759   
350  63.3583   D10       3    17759   
765  77.9583   D11       3    13502  

然后我根据 'Cabin' 值的第一个字母开始划分 'Cabin'。我的最终目标是以图形方式显示 Pclass 和每个 Cabin 组之间的关系。我通过以下代码创建了群组:

Cabin_group =Cabin_hunt.groupby([ Cabin_hunt.Pclass,Cabin_hunt.Cabin.str[0]]).size().unstack()

我的输出如下所示:

Cabin      A     B     C     D     E     F    G    T
Pclass                                              
1       22.0  65.0  94.0  40.0  34.0   NaN  NaN  1.0
2        NaN   NaN   NaN   6.0   4.0  13.0  NaN  NaN
3        NaN   NaN   NaN   NaN   3.0   8.0  5.0  NaN

Cabin_group.columns 和 index 输出以下代码:

Cabin_group.columns

Index([u'A', u'B', u'C', u'D', u'E', u'F', u'G', u'T'], dtype='object',    name=u'Cabin')

Cabin_group.index

 Int64Index([1, 2, 3], dtype='int64', name=u'Pclass')

理想情况下,我要一屏8图;每个字母(A-T)一个。 在每个图表中,我想显示三个条形图,每个条形图代表 x 轴上的 Pclass 和 y 轴上的观察量。

我试过 CountplotPairGrid 但我无法让它工作。

g = sns.PairGrid(Cabin_group)
g.map(sns.countplot)
plt.show()

我也试过这样的:

g = sns.FacetGrid(Cabin_group, col=Cabin_group.columns, size=4, aspect=.5)
g.map(sns.countplot,x=Cabin_group.index)

回想起来,这似乎是完全错误的。

如有任何建议,我们将不胜感激。

据我从你想要得到的图表的描述中了解到,这就是我在 IPython 笔记本中所做的:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# Generate Data
data = np.array(
    [[ 22.,  65.,  94.,  40.,  34.,  np.nan,  np.nan,   1.],
    [ np.nan,  np.nan,  np.nan,   6.,   4.,  13.,  np.nan,  np.nan],
    [ np.nan,  np.nan,  np.nan,  np.nan,   3.,   8.,   5.,  np.nan]]
)
df = pd.DataFrame(data)
df.columns.name = 'Cabin'
df.columns = 'A     B     C     D     E     F    G    T'.split()
df.index.name = 'Pclass'
df.index = [1, 2, 3]

# Plot Data
for no, col in enumerate(df):
    plt.subplot(2, 4, no+1)
    df[col].plot(kind='bar', title=col)
    plt.xlabel('Pclass')
    plt.ylabel('Amount of observations')
    plt.ylim([0, df.max().max()])
plt.tight_layout()
plt.show()

这是结果: