Python Pandas - finding duplicate names and telling them apart
First I will comment on the coding, then I will suggest an alternative solution

Variable naming

Ideally you want your variable names to express what the purpose of a variable is. nameid and df2 are partly understandable, namead is not.

Exception

Never just do try-except. Always try to be as specific as possible on the exception. In the creation of nameid you except a KeyError, and in the other case a IndexError. Then use it like that

collections.defaultdict or dict.setdefault

Instead of trying and getting the KeyError, it is easier to use 

nameid = defaultdict(list)
for i in df2.index:
    nameid[df2.loc[i, 'Name']].append(df2.loc[i, 'People ID'])


would work

iteration

apart from the fact that you want to prevent iteration as much as possible when using pandas (or numpy), in Python in general, there is almost always a better way than to iterator over the index. In this particular case, you can use DataFrame.iterrows. If the column labels had been valid python identifiers, DataFrame.itertuples would have been even better

nameid = defaultdict(list)
for _, row in df2.iterrows():
    nameid[row['Name']].append(row['People ID'])


with _ being the convention for the name of a variable you don't need

set

later you do

for i in nameid.keys():
    nameid[i] = list(set(nameid[i]))


Why not use set from the start, and why the conversion to list afterwards?

nameid = defaultdict(set)
for _, row in df2.iterrows():
    nameid[row['Name']].add(row['People ID'])


does all you need

len

the next part

namead = {}

for i in nameid.keys():
    paceholder = ['Nothing']
    try:
        paceholder.append(nameid[i][1])
        namead[i] = nameid[i]
    except:
        pass


uses list indexing [1] and expects lists with only 1 element to throw an Exception. This can be expressed a lot simpler with a dict expression. Later it seems the actual ids are not even needed since you only use the keys, so a set expression does the trick.

namead = {
    name
    for name, ids in nameid.items()
    if len(ids) &gt; 1
}


pandas indexing

dupes = [i for i in df2.index if df2.loc[i, 'Name'] in namead.keys()]
for i in duperevs:
    df2.loc[i, 'Name'] += ' ' + str(df2.loc[i, 'People ID'])


pandas.Series as an isin function, so there is no need to make an intermediate list of keys whose name has more id's

dupes = df2["Name"].isin(namead)
df2.loc[dupes, "Name"] += " " + df2["People ID"].astype(str)


works too

Alternative approach

You can also use groupby.nunique

dupes = df2.groupby(['Name'])["People ID"].nunique()


This is a Series with the Name as index, and the number of unique People IDs as value. Then you can filter those with a value > 1, and check against the name


Name
Jane Doe    1
John Doe    2
Name: People ID, dtype: int64



dupes_idx = df2["Name"].isin(dupes[dupes&gt;1].index)


Now you just need to append the People ID  to the Name

df2.loc[dupes_idx, "Name"] += " " + df2["People ID"].astype(str)


This was tested on

data = [
    ["John", "Doe", 1],
    ["John", "Doe", 1],
    ["John", "Doe", 2],
    ["Jane", "Doe", 1],
    ["John", "Doe", 2],
    ["Jane", "Doe", 1],
    ["John", "Doe", 1],
]

df2 = pd.DataFrame(data, columns=['First Name', 'Last Name', 'People ID'])



First Name    Last Name   People ID   Name
0     John    Doe     1   John Doe 1
1     John    Doe     1   John Doe 1
2     John    Doe     2   John Doe 2
3     Jane    Doe     1   Jane Doe
4     John    Doe     2   John Doe 2
5     Jane    Doe     1   Jane Doe
6     John    Doe     1   John Doe 1