Python pandas - группировка по недельным данным за разные годы - повторная выборка - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь использовать 'groupby' для группировки трехлетних ежедневных данных в еженедельные.

Итак, я хотел бы получить только данные, связанные с четырьмя неделями января-2017 г., затем с февраля-2017 г. и т. Д. До De c -2019.

Код, который у меня есть, и пример исходных данных показаны ниже:

prices = pd.read_csv("name_of_file.csv", header=1, index_col=0)    
prices.index = pd.to_datetime(prices.index, format='%d/%m/%Y')    
a=prices.groupby(prices.index.week).head(1)    
c=prices.groupby(prices.index.week).tail(1)

a & c выводит желаемые данные на 2017 и 2019 годы, но не для 2018. Использование resample ('w'). Mean () работает нормально, но, опять же, мне нужны точные данные, а не их среднее значение.

                  A        AAL         AAP  
Date                                                                         
2017-01-03  45.265160  44.906567  169.691284  
2017-01-04  45.859093  45.294525  171.083817  
2017-01-05  45.313847  44.508907  170.964462  
2017-01-06  46.725651  44.819275  168.726456  
2017-01-09  46.871700  45.663097  168.626968

У вас есть идея, как этого добиться? Спасибо

1 Ответ

0 голосов
/ 09 января 2020

Я не уверен, правильно ли я понял ваш вопрос (отсутствие примеров данных тоже не помогает).

Я думаю, что вам нужно агрегировать еженедельные данные с использованием различных функций для каждого из столбцов, т.е. принимать значения first каждой недели для столбцов a и b и последние значения - для столбца c.

Если это так, попробуйте следующее:

prices.groupby([pd.Grouper(freq="W")]).agg({"a": "first", "b": "first", "c": "last"})

(вы также можете использовать другие способы агрегирования, например {"a": "sum", "b": "mean", ...})


UPD.

попробовать df.resample("W").first() или df.resample("7D").first()

...