# Basic syntax:
df = df.sample(frac=1, random_state=1).reset_index(drop=True)
# Where:
# - frac=1 specifies returning 100% of the original rows of the
# dataframe (in random order). Change to a decimal (e.g. 0.5) if
# you want to sample say, 50% of the original rows
# - random_state=1 sets the seed for the random number generator and
# is useful to specify if you want results to be reproducible
# - .reset_index(drop=True) specifies resetting the row index of the
# shuffled dataframe
df = df.sample(frac=1).reset_index(drop=True)
df = df.sample(frac=1).reset_index(drop=True) #Use if you want to reset index order
df.sample(frac=1) # Use for no reset in index order
shuffled_train_df = train_df.reindex(np.random.permutation(train_df.index))