熊猫:超级类别数据

时间:2017-10-30 11:35:43

标签: python pandas group-by pandas-groupby

我正在关注Kaggle's Titanic 数据集问题。我有一个包含许多列的数据框。其中一个是名为Cabin的列(分类数据),其中包含分配给乘客的机舱编号,  另一列Survived仅包含01(0-未幸存,1幸存)

Survived   Parch            Ticket        Fare      Cabin   Embarked  
0          0            A/5 21171       7.2500       C85        S  
1          0             PC 17599      71.2833       C85        C  
1          0              3101282       7.9250       C85        S  
0          0               113803      53.1000      A123        S  
0          0               373450       8.0500      B123        S  

我想根据小屋对这些数据进行分组,看看有多少人从每个小组/小屋中幸存下来。我尝试使用groupby函数

df.groupby(["Cabin"]["Survived"].sum()

这会将数据分成太多详细的组。

A10      0
A14      2
A16      1
A19      4
A20      5
F38      1
F4       3
G6       7
T        0

相反,我希望它们能够根据机舱A,机舱B,机舱C等进行分组。

A   30
B   0
C   40

我想用字典存储所有不同的A,B等。

dic = {"A": ["A10", "A34", "A36", "A5", "A6", "A7"],
       "B": ["B101", "B102", "B18", "B19", "B20"],
        .....................
      }

但是由于有147个不同的类别(A2,A3,B56,F45 ......),仅仅为一项任务做太多了。是否有任何内置功能可以帮助完成此任务?

1 个答案:

答案 0 :(得分:3)

你可以groupby第一个字母。

df

   Survived  Parch     Ticket     Fare Cabin Embarked
0         0      0  A/5 21171   7.2500   C85        S
1         1      0   PC 17599  71.2833   C85        C
2         1      0    3101282   7.9250   C85        S
3         0      0     113803  53.1000  A123        S
4         0      0     373450   8.0500  B123        S

df.groupby(df.Cabin.str[0]).Survived.sum()

Cabin
A    0
B    0
C    2
Name: Survived, dtype: int64

您不必经历创建字典的麻烦。