Panda: come unire i valori di più colonne in una sola


È possibile utilizzare i seguenti metodi per raggruppare valori da più colonne di un DataFrame panda in una singola colonna:

Metodo 1: unisci i valori in base all’ordine delle colonne predefinito

 df[' coalesce '] = df. bfill (axis= 1 ). iloc [:, 0]

Metodo 2: unisci valori utilizzando un ordine di colonne specifico

 df[' coalesce '] = df[[' col3 ', ' col1 ', ' col2 ']]. bfill (axis= 1 ). iloc [:, 0]

I seguenti esempi mostrano come utilizzare ciascun metodo nella pratica con i seguenti DataFrame panda:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' points ': [np.nan, np.nan, 19, np.nan, 14],
                   ' assists ': [np.nan, 7, 7, 9, np.nan],
                   ' rebounds ': [3, 4, np.nan, np.nan, 6]})

#view DataFrame
print (df)

   points assists rebounds
0 NaN NaN 3.0
1 NaN 7.0 4.0
2 19.0 7.0 NaN
3 NaN 9.0 NaN
4 14.0 NaN 6.0

Metodo 1: unisci i valori in base all’ordine delle colonne predefinito

Il codice seguente mostra come unire i valori delle colonne punti, assist e rimbalzi in un’unica colonna, utilizzando il primo valore diverso da zero nelle tre colonne come valore unito:

 #create new column that contains first non-null value from three existing columns 
df[' coalesce '] = df. bfill (axis= 1 ). iloc [:, 0]

#view updated DataFrame
print (df)

   points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 19.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 14.0

Ecco come è stato scelto il valore nella colonna di unione :

  • Prima riga: il primo valore diverso da zero era 3.0 .
  • Seconda riga: il primo valore diverso da zero era 7.0 .
  • Terza riga: il primo valore diverso da zero era 19.0 .
  • Quarta riga: il primo valore diverso da zero era 9.0 .
  • Quinta riga: il primo valore diverso da zero era 14.0 .

Metodo 2: unisci valori utilizzando un ordine di colonne specifico

Il codice seguente mostra come unire i valori nelle tre colonne analizzando le colonne nel seguente ordine: assist, rimbalzi, punti.

 #coalesce values in specific column order
df[' coalesce '] = df[[' assists ', ' rebounds ', ' points ']]. bfill (axis= 1 ). iloc [:, 0]

#view updated DataFrame
print (df)

   points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 7.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 6.0

Ecco la logica utilizzata per decidere quale valore inserire nella colonna di unione :

  • Se il valore nella colonna helper non è zero, utilizza quel valore.
  • Altrimenti, se il valore nella colonna dei rimbalzi non è zero, utilizza quel valore.
  • Altrimenti, se il valore nella colonna dei punti non è zero, utilizza quel valore.

Nota : puoi trovare la documentazione completa per la funzione bfill() qui .

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre operazioni comuni nei panda:

Come combinare due colonne in Pandas
Come sommare colonne specifiche in Pandas
Come ordinare per più colonne in Pandas

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *