2016-06-07 2 views
0

Я пытаюсь найти быстрый и чистый способ сопоставить значения от одного DataFrameA к другому. Пусть говорят, что я DataFrame как это одна:Сопоставление значений из одного DataFrame в другое

C1 C2 C3 C4 C5 
1 a b c a 
2 d a e b a 
3 a c 
4 b e e 

А теперь я хочу, чтобы изменить эти буквенные коды к реальным значениям. Мое DataFrameB с объяснения выглядит следующим образом:

Code Value 
1 a  'House' 
2 b  'Bike' 
3 c  'Lamp' 
4 d  'Window' 
5 e  'Car' 

До сих пор мой перебор подход был просто пройти через каждый элемент в A и проверить с isin() значением в B. Я знаю, что я также могу использовать Series (или простой словарь) как B вместо DataFrame и использовать, например, Code столбец в качестве индекса. Но все же мне нужно будет использовать несколько циклов, чтобы отобразить все.

Есть ли другой хороший способ достичь моей цели?

ответ

3

Другой альтернативой является map. Хотя это требует зацикливание по столбцам, если я не испортит испытания, он все равно быстрее, чем заменить:

A = pd.DataFrame(np.random.choice(list("abcdef"), (1000, 1000))) 
B = pd.DataFrame({'Code': ['a', 'b', 'c', 'd', 'e'], 
        'Value': ["'House'", "'Bike'", "'Lamp'", "'Window'", "'Car'"]}) 
B = B.set_index("Code")["Value"] 

%timeit A.replace(B) 
1 loop, best of 3: 970 ms per loop 

C = pd.DataFrame() 

%%timeit 
for col in A: 
    C[col] = A[col].map(B).fillna(A[col]) 
1 loop, best of 3: 586 ms per loop 
2

Вы можете использовать replace:

A.replace(B.set_index('Code')['Value']) 

import pandas as pd 
A = pd.DataFrame(
    {'C1': ['a', 'd', 'a', 'b'], 
    'C2': ['b', 'a', 'c', 'e'], 
    'C3': ['c', 'e', '', 'e'], 
    'C4': ['a', 'b', '', ''], 
    'C5': ['', 'a', '', '']}) 
B = pd.DataFrame({'Code': ['a', 'b', 'c', 'd', 'e'], 
        'Value': ["'House'", "'Bike'", "'Lamp'", "'Window'", "'Car'"]}) 
print(A.replace(B.set_index('Code')['Value'])) 

дает

  C1  C2  C3  C4  C5 
0 'House' 'Bike' 'Lamp' 'House'   
1 'Window' 'House' 'Car' 'Bike' 'House' 
2 'House' 'Lamp'       
3 'Bike' 'Car' 'Car'     
Смежные вопросы