Always return a SubDataFrame with sub