Tabelas de junção à esquerda (1: n) usando Pandas, mantendo o número de linhas igual ao da tabela à esquerda

Sabih

Como faço para juntar tabelas à esquerda com relação 1: n, enquanto mantenho o número de linhas igual ao da tabela esquerda e concatenando quaisquer dados duplicados com um caractere / string como ';'

Exemplo:
Tabela de Países

CountryID      Country      Area
1              UK           1029
2              Russia       8374

Tabela das cidades

CountryID      City     
1              London           
1              Manchester       
2              Moscow          
2              Ufa   

Eu quero:

CountryID      Country      Area      Cities
1              UK           1029      London;Manchester
2              Russia       8374      Moscow;Ufa

Eu sei como fazer uma junção à esquerda normal

country.merge(city, how='left', on='CountryID')

o que me dá quatro linhas em vez de duas:

Area      Country      CountryID      City
1029      UK           1              London
1029      UK           1              Manchester
8374      Russia       2              Moscow
8374      Russia       2              Ufa
Jezreel

Use mappor Seriescriado por groupby+ joinpara uma nova coluna em df1se o desempenho for importante:

df1['Cities'] = df1['CountryID'].map(df2.groupby('CountryID')['City'].apply(';'.join))
print (df1)
   CountryID Country  Area             Cities
0          1      UK  1029  London;Manchester
1          2  Russia  8374         Moscow;Ufa

Detalhe :

print (df2.groupby('CountryID')['City'].apply(';'.join))
CountryID
1    London;Manchester
2           Moscow;Ufa
Name: City, dtype: object

Outra solução com join:

df = df1.join(df2.groupby('CountryID')['City'].apply(';'.join), on='CountryID')
print (df)
   CountryID Country  Area               City
0          1      UK  1029  London;Manchester
1          2  Russia  8374         Moscow;Ufa

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

TOP lista

quentelabel

Arquivo