O mapeamento de uma coluna de uma trama de dados para outro

votos
0

Gostaria de mapear os valores em df2 [ 'col2'] à DF [ 'col1']:

df        col1   col2
0       w      a
1       1      2
2       2      3

Eu gostaria de usar uma coluna da trama de dados como um dicionário para obter:

        col1   col2
0       w      a
1       A      2
2       B      3

No entanto, o dicionário de dados é apenas uma coluna na df2, que parece

df2        col1   col2     
1       1      A
2       2      B

Eu tentei usar o seguinte:

di = {df2['col1']: df2['col2']}
final = df1.replace({df2['col2']: di})

Mas recebo um erro: TypeError: 'Series' objects are mutable, thus they cannot be hashed

Eu tenho cerca de um 200.000 linhas. Qualquer ajuda seria apreciada.

Editar:

O dicionário amostra seria semelhante di = {1: A, 2: B}, mas é no df2['col1']: df2['col2']. Eu tenho 200k + linhas, posso converter df2['col1']: df2['col2']a uma tupla, etc?

Publicado 27/11/2018 em 18:08
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Você pode construir um dicionário de pesquisa baseado no col1:col2de DF2 e depois usar isso para substituir os valores em df1.col1.

import pandas as pd
df1 = pd.DataFrame({'col1':['w',1,2],'col2':['a',2,3]})
df2 = pd.DataFrame({'col1':[1,2],'col2':['A','B']})

print(df1)
#  col1 col2
#0    w    a
#1    1    2
#2    2    3

print(df2)
#   col1 col2
#0     1    A
#1     2    B

dataLookUpDict = {row[1]:row[2] for row in df2[['col1','col2']].itertuples()}
final = df1.replace({'col1': dataLookUpDict})

print(final)
#  col1 col2
#0    w    a
#1    A    2
#2    B    3
Respondeu 27/11/2018 em 18:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more