灵活使用unstack和nunique真的是相当的强大,遇到了统计套牌车的一个需求。
第一部我们使用分组函数统计车牌号,并将其展开成一个映射表,统计出现次数,使用unstack(0)是指将第几个列名抬上去,由双主键变为一列,一序号。
cartype = df.groupby(['车牌号', '车型'])['车型'].count().unstack(level=0)
unstack前
车牌号 车型
计货2 1 1 1 1 1 1
辽A837GK 计货1 1 1 1 1 1 1
冀C79185 计货2 1 1 1 1 1 1
unstack后
车牌号 辽A837GK 冀C79185 ... 黑iBJ4199 ,辽CG1300 ,辽LP1547
车型 ...
一型货 NaN NaN NaN ... NaN NaN NaN
一型车 NaN NaN NaN ... NaN NaN NaN
三型货 NaN NaN NaN ... NaN NaN NaN
cartype.index
Index(['一型货', '一型车', '三型货', '三型车', '二型货', '二型车', '五型货', '五型车', '四型货', '四型车',
'特货1', '特货2', '特货3', '特货4', '特货5', '计货1', '计货2', '计货3', '计货4', '计货5'],
dtype='object', name='车型')
cartype.columns
Index(['', ' 辽A837GK', ' 冀C79185 ', ' 冀T65357 ', ' 吉A58067', ' 吉A5G900',
' 吉A5K206 ', ' 吉AP5391', ' 吉B74217', ' 吉BB7038 ',
...
'黑UNA737', '黑UR1680', '黑XX35VL', '黑YN71F5', '黑YP5160', '黑Z58101',
'黑ZC6502', '黑iBJ4199', ',辽CG1300', ',辽LP1547'],
dtype='object', name='车牌号', length=149605)
然后在使用nunique统计,就能得到使用过的车型的状态,每个车牌号只能对应一种车型,所以大于1的都是套牌车。
车牌号
辽A837GK 1
冀C79185 1
冀T65357 1
吉A58067 1
吉A5G900 1
吉A5K206 1
吉AP5391 1
吉B74217 1
吉BB7038 1
吉C3D728 1
吉C4L008 1
吉CA5958 1