Supponiamo di partire da questa semplice tabella, memorizzata in un dataframe panda:Esiste un'operazione "separa per" opposta a .groupby in panda?
name age family
0 john 1 1
1 jason 36 1
2 jane 32 1
3 jack 26 2
4 james 30 2
poi faccio
group_df = df.groupby('family')
group_df = group_df.aggregate({'name': name_join, 'age': pd.np.mean})
dove name_join
è una semplice funzione di aggregazione per i nomi:
def name_join(list_names, concat='-'):
return concat.join(list_names)
l'uscita è:
age name
family
1 23 john-jason-jane
2 28 jack-james
Ora la domanda.
Esiste un modo rapido ed efficiente per ottenere quanto segue dalla tabella aggregata?
name age family
0 john 23 1
1 jason 23 1
2 jane 23 1
3 jack 28 2
4 james 28 2
(Nota: i numeri sono solo esempi, non mi interessa per le informazioni che mi sto perdendo dopo una media in questo esempio specifico)
Il modo in cui ho pensato che avrei potuto farlo non sembra troppo efficiente :
- creare dataframe vuoto
- da ogni linea
group_df
, separare i nomi - cambio una dataframe con un numero di righe come ci sono nomi nel riga iniziale
- aggiungerà l'output al dataframe vuoto
possibile duplicato di [panda: come divido il testo in una colonna in più colonne?] (Http://stackoverflow.com/questions/17116814/pandas-how-do-i-split-text-in-a -colonna in più colonne) –