Python pandas由两列组成

时间:2016-10-16 13:38:17

标签: python pandas dataframe group-by

我有一个pandas数据帧:

       code   type
index  
  312   11     21
  312   11     41 
  312   11     21
  313   23     22
  313   11     21
  ...   ...    

所以我需要根据每个索引项的对“代码”和“类型”列的数量对其进行分组:

        11_21   11_41  23_22
index  
  312       2      1      0
  313       1      0      1
  ...   ...   

如何使用python和pandas实现它?

1 个答案:

答案 0 :(得分:1)

这是使用pd.crosstab的一种方式,然后使用级别信息重命名列名。

In [136]: dff = pd.crosstab(df['index'], [df['code'], df['type']])

In [137]: dff
Out[137]:
code  11    23
type  21 41 22
index
312    2  1  0
313    1  0  1

In [138]: dff.columns = ['%s_%s' % c for c in dff.columns]

In [139]: dff
Out[139]:
       11_21  11_41  23_22
index
312        2      1      0
313        1      0      1

或者,不太优雅,创建另一个列并使用交叉表。

In [140]: df['ct'] = df.code.astype(str) + '_' + df.type.astype(str)

In [141]: df
Out[141]:
   index  code  type     ct
0    312    11    21  11_21
1    312    11    41  11_41
2    312    11    21  11_21
3    313    23    22  23_22
4    313    11    21  11_21

In [142]: pd.crosstab(df['index'], df['ct'])
Out[142]:
ct     11_21  11_41  23_22
index
312        2      1      0
313        1      0      1