Decision Tree gives 100% accuracy - what am I doing wrong?
Machine Learning is one of the few things where 99% is excellent and
  100% is terrible.


Well, I cannot prove this because I don't have your data, but probably:


the test data is included in the training data.


To check this possibility, here's a hint:

print(X_test[X_test.isin(X_train)])


will print all the rows in X_test that appear in X_train. Can you think what to do with that information? :)

Or


you forgot to remove the target variable y from X.


To check this possibility, simply type:

print(X_train.columns)


and check whether one of the columns matches the name of the target variable.