2016-09-01 4 views
2

У меня есть 2 Pandas dfs, A и B. Оба имеют 10 столбцов и индекс 'ID'. Если совпадают идентификаторы A и B, я хочу заменить строки B строками A. Я пытался использовать pd.update, но пока не удалось. Любая помощь оценивается.Замените строки в pandas df строками из другого df

+2

попробовать 'A.combine_first (B)' должны work.See [как сделать воспроизводимый пример] (HTTP: // stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – shivsn

+0

Если вы обновите строки B с строками A, то придет тот же результат? не ясно, можете ли вы представить пример ожидаемого вывода –

+0

Марлон: Нет, A и B содержат некоторые совпадающие идентификаторы, но содержимое других столбцов отличается. –

ответ

0

ниже кода следует сделать трюк

s1 = pd.Series([5, 1, 'a']) 
s2 = pd.Series([6, 2, 'b']) 
s3 = pd.Series([7, 3, 'd']) 
s4 = pd.Series([8, 4, 'e']) 
s5 = pd.Series([9, 5, 'f']) 



df1 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)], columns = ["A", "B", "C"]) 

s1 = pd.Series([5, 6, 'p']) 
s2 = pd.Series([6, 7, 'q']) 
s3 = pd.Series([7, 8, 'r']) 
s4 = pd.Series([8, 9, 's']) 
s5 = pd.Series([9, 10, 't']) 

df2 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)], columns = ["A", "B", "C"]) 

df1.loc[df1.A.isin(df2.A), ['B', 'C']] = df2[['B', 'C']] 
print df1 

выход

A B C 
0 5 6 p 
1 6 7 q 
2 7 8 r 
3 8 9 s 
4 9 10 t 
+0

Старый вопрос, но что, если я хочу заменить целую строку вместо некоторых столбцов? –

+0

@ Rafael Almeida Я предполагаю, что у вас одинаковые установленные столбцы в обоих кадрах данных; Попробуй это; cols = list (df1.columns) df1.loc [df1.A.isin (df2.A), cols] = df2 [cols] – Shijo

Смежные вопросы