2016-07-01 6 views
2

У меня есть два кадра данных, оба имеют одинаковое количество столбцов и содержат текстовые данные. Проблема заключается в том, что данные во втором dataframe отсутствуют деталь:Устанавливает значение строки в фрейме данных Pandas, равном значению строки в другом фрейме данных

A  B 
1 Bob Hoskins 
2 Laura Hogan 
3 Tom Jones 

    A  B 
1 Bob  x 
2 Bob  x 
3 Bob  x 
4 Laura x 
5 Laura x 
6 Tom  x 

Какой самый быстрый способ панд, чтобы установить значение столбца «B» во втором dataframe равного соответствующей условной стоимости в первый? Итак, любая строка, где «A» = «Боб» будет иметь «B», установленную Хоскинсом, Лорой Хогану и так далее? Второй блок данных также довольно большой, с 100 000 строк, поэтому предпочтительным является быстрое решение.

+0

Значимость s на самом деле 'x' и интерпретируются как отсутствующие? – piRSquared

+0

Это была просто строка-заполнитель, которую я использую для примера, просто предположим, что ее набор равен 'x' – GreenGodot

ответ

3

Выполните левый join на втором ДФ:

output = df2.merge(df1, how = "left", on = "A") 

* желаемый ДФ: *

 A  B 
0 Bob Hoskins 
1 Bob Hoskins 
2 Bob Hoskins 
3 Laura Hogan 
4 Laura Hogan 
5 Tom Jones 
+0

@GreenGodot сообщите мне, если это не сработало для вас. –

+0

Привет, проблема с этим подходом заключается в том, что с тех пор я добавил один или два дополнительных столбца в схему dataframe. Это всего три несвязанных столбца, которые имеют одинаковые значения для обеих соответствующих строк в обоих кадрах данных. Когда я запускаю свой код, я дважды повторяю эти столбцы (с добавлением _x и __ к их имени). Есть ли способ избежать этого за пределами обрезки данных? – GreenGodot

2

Вы можете установить A в качестве индекса для первого кадра данных, а затем фильтровать строки на основе по индексу:

df.set_index('A').loc[df1.A].reset_index() 

#  A   B 
# 0 Bob Hoskins 
# 1 Bob Hoskins 
# 2 Bob Hoskins 
# 3 Laura  Hogan 
# 4 Laura  Hogan 
# 5 Tom  Jones 
Смежные вопросы