Изменение значений в DataFrame
Есть некий DataFrame, представленный ниже:
name version year
0 Python 2 1999
1 Java SE8 2010
2 PHP 8 2015
Подскажите пожалуйста как в DataFrame, который представлен выше изменить значения на те, что представлены в таблице ниже? Т.е первый столбец новых данных - это заголовки столбцов где происходят изменения, а второй столбец значения, которые изменяются Таблица с новыми данными может изменяться, но общий вид остается такой же
0 year 2000
1 year 2014
2 version 7
Должно получится так ↓
name version year
0 Python 2 2000
1 Java SE8 2014
2 PHP 7 2015
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
в общем случае решения можно свести к циклу по совету @CrazyElf:
for i in df2.itertuples():
df1.loc[i[0], i[1]] = i[2]
df1:
name version year
0 Python 2 2008
1 Java SE8 2014
2 PHP 7 2015
UPDATE
Вот что-то такое, более-менее векторное:
dummies = pd.get_dummies(df2,prefix='', prefix_sep='', dtype=bool)
t = dummies.multiply(dummies[1], axis=0).drop(columns=[1]).replace(0, np.nan)
df1.update(t.fillna(df1))
df1, понятно, будет
name version year
0 Python 2 2008.0
1 Java SE8 2014.0
2 PHP 7.0 2015
Автор решения: SergFSM
→ Ссылка
мне на ум пришел такой вариант, правда с побочным эффектом:
>>> df2 # обозвал колонки
'''
col val
0 year 2000
1 year 2014
2 version 7
'''
df1.year = df2.query('col=="year"').val.combine_first(df1.year)
df1.version = df2.query('col=="version"').val.combine_first(df1.version)
или, чтобы не повторяться, можно циклом пройтись:
for c in df2.col.unique():
df1[c] = df2.query('col==@c').val.combine_first(df1[c])
>>> df1
'''
name version year
0 Python 2 2000.0
1 Java SE8 2014.0
2 PHP 7.0 2015.0