Próbuję owijać mój mózg wokół struktur danych pandas
i próbować użyć ich trochę w gniewie. Zorientowałem się, że operacje groupby
powodują powstanie obiektu serii pand. Ale nie jestem w stanie wymyślić, jak korzystać z powstałej serii. W szczególności, chcę zrobić dwie rzeczy:Dołączanie do serii Pand z hierarchicznym indeksem powrót do źródła DataFrame
1) „join” wyniki z powrotem do pierwotnej DataFrame
2) Wybierz konkretną wartość wynikającą z serii opartej na indeksie hierarchicznej.
Oto przykład zabawka do pracy z:
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))
tak powstałe serii (wyników) wygląda następująco:
group1 group2
a c 2.605
d 9.000
b d 20.500
e 36.000
to ma sens. Ale w jaki sposób:
1) dołączyć do tej z powrotem do pierwotnego DataFrame df
2) Wybierz jedną wartość, gdzie, powiedzmy, grupa1 == 'b' & grupa2 == 'd'
Wygląda dokładnie tak, jak próbowałem. To dobry przykład, jak ustawić indeks. Nie zdawałem sobie sprawy, jak to działa. –
@ Wouter-Overmeire - bardzo ładne. Walczyłem z tym dzisiaj. – John
@ wouter-overmeire, @ jd-long - jak by to działało, gdyby więcej niż jeden wynik musiał być dodany z powrotem do DataFrame. Na przykład, w jaki sposób wyniki dwóch oddzielnych funkcji, np. 'def UCL (x): zwraca średnią (x2) + np.std * 2' i' def LCL (x): zwraca średnią z powrotem (x2) -np.std * 2' z powrotem do df? Czy jest jakiś lepszy sposób? – John