Ну, вот такой, например, вариант
import pandas as pd
data = {
'1': ['L', 'M', 'L', 'O', 'M'],
'2': ['M', 'O', 'M', None, 'O'],
'3': ['O', None, 'O', None, None]}
df = pd.DataFrame.from_dict(data)
print('original:\n', df)
column_letter_map = {'1': 'L', '2': 'M', '3': 'O'} # соответствие между названием столбца и буквой
new_data = list()
# перебираем все содержимое словаря
for column, letter in column_letter_map.items():
new_data.append(
(df == letter).any(axis=1) # ищем буквы
.replace({True: letter, False: None}) # если нашли, то меняем на саму эту букву
)
new_data[-1].name = column
new_df = pd.concat(new_data, axis=1)
print('\nmodified:\n', new_df)