Вы не можете использовать DictReader при наличии дублирующих заголовков. Что вы можете сделать, так это перейти к csv.reader, и у вас есть логика для присвоения значения.
Я считаю, что проще использовать pandas и numpy lot (если у вас есть свобода установки этих пакетов).
import pandas as pd
import numpy as np
df = pd.read_csv("profile.csv")
#handling the second 'Name' and 'Title' header
df['Name.2'] = np.where(df['Name.1'].isna(), df['Title.1'], df['Name.1'])
df['Title.1'] = np.where(df['Name.1'].isna(), "", df['Title.1'])
#handling the first 'Name' and 'Title' header
df['Name.3'] = np.where(df['Name'].isna(), df['Title'], df['Name'])
df['Title'] = np.where(df['Name'].isna(), "", df['Title'])
# Drop the old columns, since we have new ones in 'Name.2' and 'Name.3'
df.drop(['Name.1','Name'], inplace=True, axis=1)
# Rearranging the columns to match modified.csv
df = df[['Organization', 'Working since', 'Gender', 'Title', 'Name.3','ID','Title.1','ID.1','Name.2']]
# Rename columns to match modified.csv
df.rename(columns={'Name.2':'Name', 'Name.3': 'Name', 'Title.1':'Title', 'ID.1':'ID'}, inplace=True)
df.to_csv("modified.csv", index=False)
Панды могут идентифицировать дубликаты заголовков и добавлять к ним суффикс, облегчая изменение столбцов.