I think using a Counter would be appropriate in these situations.
The only downside is conversion from df to dict and vice versa.
from collections import Counter
# initialize your variables
df = pd.DataFrame({'name': ['a', 'b', 'c'],
'count': [1, 2, 0]})
l = ['a', 'b', 'd']
# convert to dict with name - count pairs and update with counter of l
df_as_dict = dict(zip(df['name'].values, df['count'].values))
df_as_dict.update(Counter(df_as_dict) + Counter(l))
# create dataframe with updates values
new_df = pd.DataFrame({'name': list(df_as_dict.keys()),
'count': list(df_as_dict.values())})
# ensure df format
new_df = new_df.sort_values('name').reset_index(drop=True)
new_df
Output
count name
0 2 a
1 3 b
2 0 c
3 1 d