Ricerca…


Sintassi

  • Dataframe. unire (a destra, come = 'inner', on = None, left_on = None, right_on = None, left_index = False, right_index = False, sort = False, suffixes = ('_ x', '_y'), copy = True, indicatore = Falso )

  • Unisci oggetti DataFrame eseguendo un'operazione di join in stile database per colonne o indici.

  • Se si uniscono colonne su colonne, gli indici DataFrame verranno ignorati. Altrimenti, se si uniscono indici su indici o indici su una colonna o colonne, l'indice verrà passato.

Parametri

parametri Spiegazione
destra dataframe
Come {'left', 'right', 'outer', 'inner'}, default 'inner'
lasciato acceso etichetta o lista, o array-like. Nomi dei campi per unirsi in DataFrame a sinistra. Può essere un vettore o un elenco di vettori della lunghezza di DataFrame per utilizzare un vettore particolare come chiave di join anziché colonne
right_on etichetta o lista, o array-like. Nomi dei campi per unirmi a destra in DataFrame o in un vettore / elenco di vettori per left_on docs
left_index booleano, predefinito False. Utilizzare l'indice da sinistra DataFrame come chiave di join. Se è un MultiIndex, il numero di chiavi nell'altro DataFrame (l'indice o un numero di colonne) deve corrispondere al numero di livelli
right_index booleano, predefinito False. Utilizzare l'indice dal DataFrame corretto come chiave di join. Gli stessi avvertimenti di left_index
ordinare booleano, predefinito Fals. Ordinare le chiavi di join lessicograficamente nel risultato DataFrame
suffissi Sequenza di 2 lunghezze (tupla, lista, ...). Suffisso da applicare ai nomi di colonne sovrapposte rispettivamente sul lato sinistro e destro
copia booleano, predefinito True. Se False, non copiare i dati inutilmente
indicatore booleano o stringa, predefinito False. Se True, aggiunge una colonna per emettere DataFrame chiamato "_merge" con informazioni sull'origine di ogni riga. Se stringa, la colonna con le informazioni sull'origine di ogni riga verrà aggiunta all'output DataFrame e la colonna verrà denominata con il valore di stringa. La colonna Informazioni è di tipo Categoriale e assume un valore di "left_only" per le osservazioni la cui chiave di unione viene visualizzata solo in "Data" di sinistra, "right_only" per le osservazioni la cui chiave di unione viene visualizzata solo in "Data" DataFrame e "entrambi" se la la chiave di fusione dell'osservazione si trova in entrambi.

fondersi

Ad esempio, vengono date due tabelle,

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'obiettivo è ottenere la nuova tabella T3:

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

Che è quello di creare colonne s1 , s2 e s3 , ciascuna corrispondente a una riga (il numero di righe per id è sempre fisso e uguale a 3)

Applicando join (che accetta un argomento opzionale che può essere una colonna o più nomi di colonne, che specifica che il DataFrame passato deve essere allineato su quella colonna in DataFrame). Quindi la soluzione può essere come mostrato di seguito:

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

Se li separo:

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

Unione di due 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

Join interno:

Utilizza l'intersezione di chiavi da due 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

In alternativa, specificare l'intersezione di chiavi da due Dataframes.

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

Join esterno:

Utilizza l'unione delle chiavi da due 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

Unire a sinistra:

Utilizza solo le chiavi da DataFrame sinistro.

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

Giusto Iscriviti

Utilizza solo le chiavi dal giusto 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

Unione / concatenazione / unione di più frame di dati (orizzontalmente e verticalmente)

genera frame di dati di esempio:

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

unire / unire / concatenare i frame di dati [df1, df2, df3] verticalmente - aggiungere righe

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

unione / unione / concatenazione di frame di dati orizzontalmente (allineamento per indice):

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

Unisci, Unisci e Concat

L'unione dei nomi delle chiavi è la stessa

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

L'unione dei nomi delle chiavi è diversa

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

Diversi tipi di unione

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

Unione su più chiavi

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

Trattamento di colonne sovrapposte

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

Utilizzo dell'indice di riga invece delle chiavi di unione

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

Evitare l'uso della sintassi .join in quanto fornisce un'eccezione per le colonne sovrapposte

Fusione sull'indice dataframe sinistro e colonna destra dataframe

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

Concetti i dati

Incollato verticalmente

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

Incollato orizzontalmente

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

Qual è la differenza tra join e merging

Considera i dati a left e a 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
Pensa di join come vuoi combinare ai dataframes in base ai loro rispettivi indici. Se ci sono colonne sovrapposte, join ti consente di aggiungere un suffisso al nome della colonna sovrapposta dal dataframe sinistro. I nostri due dataframe hanno un nome di colonna sovrapposto A

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

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

Si noti che l'indice è conservato e abbiamo 4 colonne. 2 colonne da left e 2 da right .

Se gli indici non si allineano

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

Ho usato un'unione esterna per illustrare meglio il punto. Se gli indici non si allineano, il risultato sarà l'unione degli indici.

Possiamo dire a join di utilizzare una colonna specifica nel dataframe sinistro da utilizzare come chiave di join, ma continuerà a utilizzare l'indice dalla destra.

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
Pensa a merge come allineato sulle colonne. Per impostazione predefinita, l' merge cerca le colonne sovrapposte su cui fondersi. merge consente un migliore controllo sulle chiavi di unione consentendo all'utente di specificare un sottoinsieme delle colonne sovrapposte da utilizzare con il parametro on o consentire separatamente la specifica di quali colonne a sinistra e di quali colonne sulla destra devono essere unite.

merge restituirà un dataframe combinato in cui l'indice verrà distrutto.

Questo semplice esempio trova la colonna sovrapposta come 'A' e combina in base ad essa.

left.merge(right)

   A  B  C
0  a  1  3
1  b  2  4

Nota che l'indice è [0, 1] e non più ['X', 'Y']

È possibile specificare esplicitamente che si sta unendo l'indice con il parametro left_index o right_index

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

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

E questo sembra esattamente come l'esempio di join sopra.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow