df2 = pd.DataFrame({\'X\' : [\'X1\', \'X1\', \'X1\', \'X1\'], \'Y\' : [\'Y2\',\'Y1\',\'Y1\',\'Y1\'], \'Z\' : [\'Z3\',\'Z1\',\'Z1\',\'Z2\']}) X Y Z 0 X1 Y2
This is a good way of counting entries within .pivot_table:
.pivot_table
df2.pivot_table(values='X', index=['Y','Z'], columns='X', aggfunc='count') X1 X2 Y Z Y1 Z1 1 1 Z2 1 NaN Y2 Z3 1 NaN