I'm learning data exploration in Python. While practising the pandas library, I saw two functions named df.assign() and df.apply(). The definition of both functions looked very similar. Can you please explain to me these two functions and their unique use cases?