我有一个pandas DataFrame,其中包含一个城市拥有的每辆汽车的两列,名称和汽车,
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,count,apply,transform,但我对游戏来说太新了......
实际上,这些品牌已经过编号,理想的做法是将它们作为系列进行处理,例如,将整行作为系列进行处理。任何帮助表示赞赏。
答案 0 :(得分: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