code: def joint_distribution(dataframe, rownames, colnames):
      
      cont_table = contingency_table(dataframe, rownames=rownames, colnames=colnames, margins=True)
      total_observations = cont_table['All']['All']
      return cont_table/total_observations
docs: Joint Distribution Table
         - The Continguency Table normalized by the total number of observations
         Args:
             rownames: the column name or list of columns names that make the keys of the rows
             colnames: the column name or list of columns names that make the keys of the columns