<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def read_external_annotation(fn):
 """Read file with junctions from some database. This does not have to be the same splice junction database used with STAR. Parameters fn : filename str File with splice junctions from annotation. The file should have a header and contain the following columns: 'gene', 'chrom', 'start', 'end', 'strand', 'chrom:start', 'chrom:end', 'donor', 'acceptor', 'intron'. Returns ------- extDF : pandas.DataFrame DataFrame indexed by splice junction stats : list of strings Human readable statistics about the external database. """

    assert os.path.exists(fn)
    extDF = pd.read_table(fn, index_col=0, header=0)
    total_num = extDF.shape[0]
    
    # In rare cases, a splice junction might be used by more than one gene. For
    # my purposes, these cases are confounding, so I will remove all such splice
    # junctions. 
    intron_count = extDF.intron.value_counts()
    extDF['intron_count'] = extDF.intron.apply(lambda x: intron_count.ix[x])
    extDF = extDF[extDF.intron_count == 1]
    extDF = extDF.drop('intron_count', axis=1)

    stats = []
    stats.append('External database stats')
    stats.append('Read external annotation\t{}'.format(fn))
    stats.append('Total number of junctions\t{:,}'.format(total_num))
    stats.append(('Number of junctions used in only one '
                  'gene\t{:,}').format(extDF.shape[0]))

    return extDF, stats