Moja ramka danych pandy składa się z kolumny kategorycznej JOB_TITLE, kolumny liczbowej BASE_SALARY i indeksu datetime JOIN_DATE. Chciałbym przeprowadzić agregację nad grupami kategorycznych i downsamplingiem datetimes następująco:Jednoczesne działanie grupy i ponowne próbkowanie na ramce danych pandy?
# Resampled at frequency of start data of every 5 years
mean_agg = (df
.groupby('JOB_TITLE')
.resample('5AS')['BASE_SALARY']
.mean())
Niestety, operacja GroupBy występuje przed resample, operacja jest wykonywana resample niezależnie dla każdej grupy JOB_TITLE. Wynika to w następujących seriach:
| JOB_TITLE | JOIN_DATE | |
|-------------------|------------|-------|
| Data Scientist | 2004-01-01 | 60000 |
| | 2009-01-01 | 75000 |
| | 2014-01-01 | 90000 |
| | | |
| Software Engineer | 2001-01-01 | 70000 |
| | 2006-01-01 | 85000 |
| | 2011-01-01 | 90000 |
| | 2016-01-01 | 85000 |
Jak widać indeksy na poziomie JOIN_DATE dla grupy danych naukowiec i inżynier oprogramowania nie są wyrównane. Stwarza to problem przy ubieganiu rozebranie stosu dla poziomu JOB_TITLE następująco:
mean_agg.unstack('JOB_TITLE')
Skutkuje to w następujący dataframe:
| JOB_TITLE | Data Scientist | Software Engineer |
|------------|----------------|-------------------|
| JOIN_DATE | | |
| 2001-01-01 | NaN | 70000 |
| 2004-01-01 | 60000 | NaN |
| 2006-01-01 | NaN | 85000 |
| 2009-01-01 | 75000 | NaN |
| 2011-01-01 | NaN | 70000 |
| 2014-01-01 | 90000 | NaN |
| 2016-01-01 | NaN | 85000 |
Jak mogę uniknąć tego sekwencyjne działanie GroupBy i resample i zamiast wykonywać jednoczesna operacja? Dzięki!
Świetnie! 'pd.TimeGrouper()' jest idealny dla mojego problemu. –