My dataframe was deleting more rows than I expected. So people with my problem might see this page too. The answer was that I needed to precede the drop line with a reset_index line. Python was finding the index that needed deleting but there were duplicates of that index; so loads of rows got deleted that should have stayed. reset_index gave a unique index to the dataframe; and solved my issue.