Краткий и элегантный ответ состоит в том, чтобы сначала создать отображение из вашего mapping_df
, а затем применить функцию, следующую за этим отображением, в вашем target_df
.
Вы можете получить карту из вашего mapping_df
с transpose
>>> mapping_df.transpose().to_dict()
{1: {'Attribute': 'Person', 'Change': '3'},
2: {'Attribute': 'Salary', 'Change': '2'}}
А затем просто примените его к вашему target_dataframe
, используя map
cleaned = pd.DataFrame()
for mapping in list(mapping_df.transpose().to_dict().values()):
cleaned[mapping['Attribute']] = target_df[mapping['Attribute']].map(
lambda s: s[: - int(mapping['Change']) ]+ int(mapping['Change']) *'x')
Вы получите ожидаемый результат
>>> cleaned
Person Salary
1 Jxxx 3xx
2 Pexxx 5xx
3 Suxxx 5xx
4 Cxxx 4xx