Checkpointing of dataframe

I would like to checkpoint know in what cases should we checkpoint and how to checkpoint a data frame and successfully use it in consequent steps. Also is it better to cache before checkpoint the data frame. This i am talking from pyspark perspective. Looking foward for help