Recherche…


Syntaxe

  • Trame de données. merge ( right, how = 'inner', on = None, left_on = None, right_on = Aucun, left_index = False, right_index = False, sort = False, suffixes = ('_ x', '_y'), copy = True, indicateur = Faux )

  • Fusionner des objets DataFrame en effectuant une opération de jointure de style base de données par colonnes ou index.

  • Si vous associez des colonnes sur des colonnes, les index DataFrame seront ignorés. Sinon, si vous joignez des index sur des index ou des index sur une ou plusieurs colonnes, l'index sera transmis.

Paramètres

Paramètres Explication
droite Trame de données
Comment {'gauche', 'droite', 'extérieur', 'intérieur'}, défaut 'intérieur'
à gauche sur label ou list, ou tableau-like. Noms de champs sur lesquels se joindre dans DataFrame gauche. Peut être un vecteur ou une liste de vecteurs de la longueur du DataFrame pour utiliser un vecteur particulier comme clé de jointure au lieu de colonnes
à droite label ou list, ou tableau-like. Noms de champs sur lesquels se joindre à droite DataFrame ou vecteur / liste de vecteurs par left_on docs
left_index booléen, par défaut False. Utilisez l'index du DataFrame de gauche comme clé (s) de jointure. S'il s'agit d'un MultiIndex, le nombre de clés dans l'autre DataFrame (l'index ou un nombre de colonnes) doit correspondre au nombre de niveaux.
right_index booléen, par défaut False. Utilisez l'index du bon DataFrame comme clé de jointure. Même mise en garde que left_index
Trier booléen, Fals par défaut. Trier les clés de jointure lexicographiquement dans le résultat DataFrame
suffixes Séquence de 2 longueurs (tuple, liste, ...). Suffixe à appliquer aux noms de colonnes qui se chevauchent respectivement à gauche et à droite
copie booléen, par défaut True. Si la valeur est False, ne copiez pas inutilement des données
indicateur booléen ou chaîne, par défaut False. Si True, ajoute une colonne à la sortie DataFrame appelée «_merge» avec des informations sur la source de chaque ligne. Si chaîne, une colonne avec des informations sur la source de chaque ligne sera ajoutée à la sortie DataFrame, et la colonne sera nommée valeur de la chaîne. La colonne d'information est de type catégorique et prend la valeur «left_only» pour les observations dont la clé de fusion n'apparaît que dans le cadre «left» DataFrame, «right_only» pour les observations dont la clé de fusion n'apparaît que dans «right» DataFrame et «both» si La clé de fusion de l'observation se trouve dans les deux.

Fusionner

Par exemple, deux tables sont données,

T1

id    x        y
8    42        1.9
9    30        1.9

T2

id    signal
8    55
8    56    
8    59
9    57
9    58    
9    60

L'objectif est d'obtenir la nouvelle table T3:

id    x        y        s1        s2        s3
8    42        1.9        55        56        58
9    30        1.9        57        58        60

Ce qui consiste à créer les colonnes s1 , s2 et s3 , chacune correspondant à une ligne (le nombre de lignes par id est toujours fixe et égal à 3)

En appliquant la join (qui prend un argument facultatif qui peut être une colonne ou plusieurs noms de colonne, ce qui spécifie que le DataFrame transmis doit être aligné sur cette colonne dans le DataFrame). La solution peut donc être la suivante:

df = df1.merge (df2.groupby ('id') ['signal']. apply (lambda x: x.reset_index (drop = True)). unstack (). reset_index ())

df
Out[63]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60

Si je les sépare:

df2t = df2.groupby('id')['signal'].apply(lambda x: x.reset_index(drop=True)).unstack().reset_index()

df2t
Out[59]: 
   id   0   1   2
0   8  55  56  59
1   9  57  58  60

df = df1.merge(df2t)

df
Out[61]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60

Fusion de deux DataFrames

In [1]: df1 = pd.DataFrame({'x': [1, 2, 3], 'y': ['a', 'b', 'c']})

In [2]: df2 = pd.DataFrame({'y': ['b', 'c', 'd'], 'z': [4, 5, 6]})

In [3]: df1
Out[3]: 
   x  y
0  1  a
1  2  b
2  3  c   

In [4]: df2
Out[4]: 
   y  z
0  b  4
1  c  5
2  d  6

Jointure interne:

Utilise l'intersection des clés de deux DataFrames.

In [5]: df1.merge(df2) # by default, it does an inner join on the common column(s)
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5

Vous pouvez également spécifier l'intersection des clés à partir de deux cadres de données.

In [5]: merged_inner = pd.merge(left=df1, right=df2, left_on='y', right_on='y')
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5

Jointure externe:

Utilise l'union des clés de deux DataFrames.

In [6]: df1.merge(df2, how='outer')
Out[6]: 
     x  y    z
0  1.0  a  NaN
1  2.0  b  4.0
2  3.0  c  5.0
3  NaN  d  6.0

Joint gauche:

Utilise uniquement les clés de gauche DataFrame.

In [7]: df1.merge(df2, how='left')
Out[7]: 
   x  y    z
0  1  a  NaN
1  2  b  4.0
2  3  c  5.0

Droit rejoindre

Utilise uniquement les clés du droit DataFrame.

In [8]: df1.merge(df2, how='right')
Out[8]: 
     x  y  z
0  2.0  b  4
1  3.0  c  5
2  NaN  d  6

Fusion / concaténation / jonction de plusieurs blocs de données (horizontalement et verticalement)

générer des exemples de trames de données:

In [57]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})

In [58]: df1 = pd.DataFrame({'col1':[11,12,13], 'col2': [21,22,23]})

In [59]: df2 = pd.DataFrame({'col1':[111,112,113], 'col2': [121,122,123]})

In [60]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})

In [61]: df1
Out[61]:
   col1  col2
0    11    21
1    12    22
2    13    23

In [62]: df2
Out[62]:
   col1  col2
0   111   121
1   112   122
2   113   123

In [63]: df3
Out[63]:
   col1  col2
0   211   221
1   212   222
2   213   223

fusionner / joindre / concaténer des trames de données [df1, df2, df3] verticalement - ajouter des lignes

In [64]: pd.concat([df1,df2,df3], ignore_index=True)
Out[64]:
   col1  col2
0    11    21
1    12    22
2    13    23
3   111   121
4   112   122
5   113   123
6   211   221
7   212   222
8   213   223

fusionner / joindre / concaténer des blocs de données horizontalement (alignement par index):

In [65]: pd.concat([df1,df2,df3], axis=1)
Out[65]:
   col1  col2  col1  col2  col1  col2
0    11    21   111   121   211   221
1    12    22   112   122   212   222
2    13    23   113   123   213   223

Fusionner, rejoindre et concat

La fusion des noms de clés est la même

pd.merge(df1, df2, on='key')

La fusion des noms de clés est différente

pd.merge(df1, df2, left_on='l_key', right_on='r_key')

Différents types d'adhésion

pd.merge(df1, df2, on='key', how='left')

Fusion sur plusieurs clés

pd.merge(df1, df2, on=['key1', 'key2'])

Traitement des colonnes superposées

pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))

Utilisation de l'index de lignes au lieu de fusionner des clés

pd.merge(df1, df2, right_index=True, left_index=True)

Évitez d'utiliser la syntaxe .join car elle donne une exception pour les colonnes qui se chevauchent

Fusion sur l'index de dataframe gauche et la colonne dataframe droite

pd.merge(df1, df2, right_index=True, left_on='l_key')

Concentrer les dataframes

Collé verticalement

pd.concat([df1, df2, df3], axis=0)

Collé horizontalement

pd.concat([df1, df2, df3], axis=1)

Quelle est la différence entre rejoindre et fusionner

Considérons les données à left et à right

left = pd.DataFrame([['a', 1], ['b', 2]], list('XY'), list('AB'))
left

   A  B
X  a  1
Y  b  2

right = pd.DataFrame([['a', 3], ['b', 4]], list('XY'), list('AC'))
right

   A  C
X  a  3
Y  b  4

join
Pensez à join que de vouloir combiner pour dataframes en fonction de leurs indices respectifs. S'il y a des colonnes qui se chevauchent, join voudra que vous ajoutiez un suffixe au nom de la colonne qui se chevauchent à partir du dataframe gauche. Nos deux cadres de données ont un nom de colonne qui se chevauche A

left.join(right, lsuffix='_')

  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4

Notez que l'index est conservé et que nous avons 4 colonnes. 2 colonnes de left et 2 de right .

Si les index ne sont pas alignés

left.join(right.reset_index(), lsuffix='_', how='outer')

    A_    B index    A    C
0  NaN  NaN     X    a  3.0
1  NaN  NaN     Y    b  4.0
X    a  1.0   NaN  NaN  NaN
Y    b  2.0   NaN  NaN  NaN

J'ai utilisé une jointure externe pour mieux illustrer ce point. Si les index ne sont pas alignés, le résultat sera l'union des index.

Nous pouvons dire à join d'utiliser une colonne spécifique dans le dataframe de gauche à utiliser comme clé de jointure, mais elle utilisera toujours l'index depuis la droite.

left.reset_index().join(right, on='index', lsuffix='_')

  index A_  B  A  C
0     X  a  1  a  3
1     Y  b  2  b  4

merge
Pensez à merge en alignant sur des colonnes. Par défaut, la merge recherche les colonnes qui se chevauchent dans lesquelles fusionner. merge donne un meilleur contrôle sur les clés de fusion en permettant à l'utilisateur de spécifier un sous - ensemble des colonnes qui se chevauchent à utiliser avec le paramètre on ou pour permettre séparément dont la spécification des colonnes à gauche et les colonnes sur le droit de fusionner par.

merge renverra un dataframe combiné dans lequel l'index sera détruit.

Cet exemple simple recherche la colonne qui se chevauche pour être 'A' et combine en fonction de celle-ci.

left.merge(right)

   A  B  C
0  a  1  3
1  b  2  4

Notez que l'index est [0, 1] et non plus ['X', 'Y']

Vous pouvez spécifier explicitement que vous fusionnez sur l'indice avec le left_index ou right_index paramter

left.merge(right, left_index=True, right_index=True, suffixes=['_', ''])

  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4

Et cela ressemble exactement à l'exemple de join ci-dessus.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow