Допустит, один имеет DataFrame df1
с INDEX
, Column1
, Column2
и другим df2
с INDEX
, Column1
, Column3
.Как сделать обновление только на части DataFrame
Оба значения INDEX
имеют одинаковые значения, поэтому я хочу использовать их для объединения информации одной таблицы с другой.
Мне сказали сделать следующие другими пользователями:
df1.update(df2, join='left', overwrite=True)
Это работает, если оба INDEXES имеют одинаковые значения. В результате будет df1 теперь иметь INDEX
, Column1
(от df2
) и Column2
(оригинал от df1
). Column3
не добавлен к df1
(это поведение требуется по сравнению с командой «merge
», которая добавляет все).
Теперь я хотел бы обновить df1 только в нескольких случаях и на основе Column2. Я думал, что это сработает:
df1[df1['Column2'] == 'Cond'].update(df2, join='left', overwrite=True)
Но это не так; иногда я получаю сообщение об ошибке, другая команда работает, но значения ALL df1
были изменены.
Любая идея о том, как это сделать?
PS: Использование .loc
не будет работать, так как это требует, чтобы любой ИНДЕКС, который вы ищете, существует, и это не так.
EDIT: Дополнительный пример
In [37]: df1 = pd.DataFrame([['USA',1],['USA',2],['USA',3],['FRA',1],['FRA',2]], columns = ['country', 'value'])
In [38]: df2 = pd.DataFrame([['USA',10],['FRA',20]], columns = ['country', 'value'])
In [39]: df1 = df1.set_index('country')
In [40]: df2 = df2.set_index('country')
In [41]: mask = df1['value'] >= 2
In [42]: idx = df1.index[mask]
In [43]: idx = idx.unique()
In [44]: df1
Out[44]:
value
country
USA 1
USA 2
USA 3
FRA 1
FRA 2
In [45]: df2
Out[45]:
value
country
USA 10
FRA 20
In [46]: idx
Out[46]: array(['USA', 'FRA'], dtype=object)
In [47]: df1.update(df2.loc[idx])
In [48]: df1
Out[48]:
value
country
USA 10
USA 10
USA 10
FRA 20
FRA 20
Вы можете добавить [Minimal, полный и проверяемый пример] (http://stackoverflow.com/help/mcve)? – jezrael
Здравствуйте, jezrael, пример ниже из unutbu - это именно то, что я был после – Yona