2016-05-31 66 views
1

我有两列,名称及汽车,也就是在一个城市拥有的每一辆汽车的熊猫数据帧不同的事件,算上熊猫

Name Car 
0 Alice Toyota 
1 Bob  Nissan 
2 Charlie Toyota 
3 Dave Ford 
4 Eve  Nissan 
5 Bob  Ford 

,我希望做一个汇总表

Name Toyota Nissan Ford 
0 Alice 1  0  1 
1 Bob  0  1  0 
2 Charlie 1  0  0 
3 Dave 0  0  1 
4 Eve  0  1  0 

我一直试图GROUPBY,计数,应用,转化,而我只是太新的游戏...

其实,品牌屈指可数,这将是理想的有办法将它们作为一个系列来处理,例如, .g。,将整行记录为Series。任何帮助表示赞赏。

回答

1

使用pivot_table()功能为:

In [30]: df.pivot_table(index=['Name'], columns=['Car'], aggfunc=len, fill_value=0) 
Out[30]: 
Car  Ford Nissan Toyota 
Name 
Alice  0  0  1 
Bob   1  1  0 
Charlie  0  0  1 
Dave  1  0  0 
Eve   0  1  0 

,或者如果你不想有Name为索引:

In [31]: df.pivot_table(index=['Name'], columns=['Car'], aggfunc=len, fill_value=0).reset_index() 
Out[31]: 
Car  Name Ford Nissan Toyota 
0  Alice  0  0  1 
1  Bob  1  1  0 
2 Charlie  0  0  1 
3  Dave  1  0  0 
4  Eve  0  1  0 

相反,如果你想拥有只是一个布尔矩阵使用get_dummies() - 它不会计数重复:

In [33]: pd.get_dummies(df.set_index('Name')) 
Out[33]: 
     Car_Ford Car_Nissan Car_Toyota 
Name 
Alice   0.0   0.0   1.0 
Bob   0.0   1.0   0.0 
Charlie  0.0   0.0   1.0 
Dave   1.0   0.0   0.0 
Eve   0.0   1.0   0.0 
Bob   1.0   0.0   0.0 
+0

所以这就是一个什么数据透视表是!感到尴尬: - /谢谢! –