Скрипту необходимо выполнить два действия. вещи для каждой строки df.
- Замените каждый экземпляр 'Name' в df на 'NameReplace' (работает)
- Для тех же строк в df замените фрагмент столбцов ( указанный списком) со значениями в том же фрагменте столбцов в replace
Код: Выделить всё
import pandas
df = pandas.DataFrame([["John", None, None],["Phil", None, None],["John", None, None],["Bob", None, None]], columns=["Name", "Age", "Height"])
replace = pandas.DataFrame([["John", "Dom", 25, 175],["Phil", "Kevin", 56, 145],["Bob", "Michael", 33, 180]], columns=["Name", "NameReplace", "Age", "Height"])
detailsList = ["Age", "Height"]
for i, row in replace.iterrows():
df.loc[df['Name'] == row['Name'], 'Name'] = row['NameReplace']
df.loc[df['Name'] == row['NameReplace'], detailsList] = row[detailsList]
print(df)
Текущий результат это
Код: Выделить всё
Name Age Height
0 Dom NaN NaN
1 Kevin NaN NaN
2 Dom NaN NaN
3 Michael NaN NaN
Код: Выделить всё
Name Age Height
0 Dom 25 175
1 Kevin 56 145
2 Dom 25 175
3 Michael 33 180
Примечание. Использование DetailList для необходимо указать фрагмент столбцов, так как в реальном решении я работаю только с определенным фрагментом полного кадра данных, в отличие от приведенного мной примера.
Подробнее здесь: https://stackoverflow.com/questions/790 ... n-values-i