Collapse a list to most common spellings
Credit to @Emre for setting me on this path with n-grams.

I discovered the library fuzzywuzzy which is well-built to solve this exact problem.  I'll give a brief synopsis, but a well-written tutorial and documentation made this pretty straight-forward.

I have a DataFrame where names are the index and there is a count column.
I loop through the index, finding high-similarity strings and then mapping the name to the name (including self) with the highest count.

names = df.index

#iterate through list find the top 10 (arbitrary) matching strings &gt; 90 score, pop off the highest-volume order one
def find_top_match(name):
    my_matches = process.extract(name, names, limit=10, scorer=fuzz.token_set_ratio)
    my_matches = [t[0] for t in my_matches if t[1] &gt;= 90]
    top_match = df.loc[my_matches].sort_values(by='count', ascending=False).index[0]
    return(top_match)

top_matches_set = []

for c in df.index:
    returned_match = find_top_match(c)
    top_matches_set.append(returned_match)

df['real_name'] = top_matches_set