我有一个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实现它?
答案 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