请考虑以下Pandas数据框,其中显示了从不同品牌和型号年份销售的汽车数量:
df = pd.DataFrame({'Y17': [ 1, 2, 1, 1, 0, 0, 1, 2, 2, 0],
'Y18': [ 0, 0, 1, 1, 1, 0, 0, 0, 0, 1],
'Make': ['Ford', 'Jeep', 'BMW', 'BMW', 'Mazda', 'Jeep', 'Chevy', 'BMW', 'Mazda','Ford']})
Make Y17 Y18
Ford 1 0
Jeep 2 0
BMW 1 1
BMW 1 1
Mazda 0 1
Jeep 0 0
Chevy 1 0
BMW 2 0
Mazda 2 0
Ford 0 1
每一行都属于特定商店的销售(未记录)。
我想调整这个数据框以获得条目数,使得索引是“make”,列是“年”和“销售数量(多级列很好)的组合。输出应该是这样的:
Y17 Y18
0 1 2 0 1 2
Make
BMW 0 2 1 1 2 0
Chevy 0 1 0 1 0 0
Ford 1 1 0 1 1 0
Jeep 1 0 1 2 0 0
Mazda 1 0 1 1 1 0
melt
然后crosstab
s=df.melt('Make')
pd.crosstab(s.Make,[s.variable,s.value]).stack().fillna(0).unstack()
variable Y17 Y18
value 0 1 2 0 1 2
Make
BMW 0 2 1 1.0 2.0 0.0
Chevy 0 1 0 1.0 0.0 0.0
Ford 1 1 0 1.0 1.0 0.0
Jeep 1 0 1 2.0 0.0 0.0
Mazda 1 0 1 1.0 1.0 0.0