Sto cercando di avvolgere il mio cervello intorno alle strutture dati pandas
e cercando di usarle un poco nella rabbia. Ho capito che le operazioni groupby
risultano in un oggetto serie pandas. Ma non riesco a capire come usare la serie risultante. In particolare, voglio fare due cose:Unire una serie di Pandas con un indice gerarchico di nuovo al DataFrame Data
1) "join" i risultati al dataframe iniziale
2) selezionare un valore specifico della serie risultante in base all'indice gerarchica.
Ecco un esempio giocattolo con cui lavorare:
import pandas
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
'group2': ['c','c','d','d','d','e'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
dfGrouped = df.groupby(["group1", "group2"] , sort=True)
## toy function, obviously not my real function
def fun(x): return mean(x**2)
results = dfGrouped.apply(lambda x: fun(x.value1))
così i conseguenti serie (risultati) assomiglia a questo:
group1 group2
a c 2.605
d 9.000
b d 20.500
e 36.000
che abbia senso. Ma come faccio a:
1) Iscriviti a questo nuovo al dataframe originale df
2) Selezionare un singolo valore in cui, per esempio, == group1 'b' & group2 == 'd'
Sembra esattamente quello che stavo cercando di fare. Questo è un buon esempio di come impostare l'indice. Non mi rendevo conto di come funzioni. –
@ wouter-overmeire - molto bello. Oggi stavo lottando con questo. – John
@ wouter-overmeire, @ jd-long - come funzionerebbe se fosse necessario aggiungere più di un risultato a DataFrame. E.g come potrebbero i risultati di due funzioni separate, ad es. 'def UCL (x): return mean (x2) + np.std * 2' e' def LCL (x): restituire mean (x2) -np.std * 2' essere passato di nuovo a df? O c'è un modo migliore? Trasformata – John