There are a few web pages on the differences.
From one of them.
"that is the difference between disk usage (du) and free blocks displayer (df)
if a file makes use of 2KB of 1 MB block
du will display that the file had used only 2KB
but df would display that 1 MB had been used as its displaying only the free blocks available,
even if 1 byte is used in 1MB free block, the free block is no more a free block and its used."
Other conditions also exist that change the values.