Как подсчитать медиану в разрезе недели и преобразовать дату? pandas python
Мне нужно осуществить действие с помощью библиотеки pandas python У меня есть датафрейм:
Date |A_AAA |A_BBB |B_BBB|
__________|___________|___________|______
24.10.2020|5 |0.6 |17
__________|___________|___________|______
25.10.2020|6 |0.7 |20
Мне нужно получить получить медиану в разрезе недели для определенного столбца и привести датафрейм к такому виду:
Year |Week |A_AAA |A_BBB|B_BBB|
__________|___________|______|_____|______
2020 |31 |срзнач|срзнач|срзнач
__________|___________|______|______|______
2020 |32 |срзнач|срзнач|срзнач
Не знаю, как. Подскажите плиз
Ответы (2 шт):
Автор решения: Dmitriy Novikov
→ Ссылка
Если я вас правильно понял
# Подготовка данных
data = pd.DataFrame([{'Date': '2020-10-24', 'A_AAA': 1, 'A_BBB': 2, 'B_BBB' :3}, {'Date': '2020-11-25', 'A_AAA': 1, 'A_BBB': 2, 'B_BBB' :3}])
data['Date'] = data['Date'].astype('datetime64')
# Вытаскиваем год и неделю
data['year'] = data['Date'].dt.year
data['week'] = data['Date'].dt.week
# Группировка данных
data.groupby(by=['year', 'week']).agg({'A_AAA': np.median, 'A_BBB': np.median, 'B_BBB': np.median})
Автор решения: strawdog
→ Ссылка
Примерный df:
date A B
0 2020-01-01 0.312451 0.968500
1 2020-01-02 0.243430 0.314655
2 2020-01-03 0.790279 0.869671
3 2020-01-04 0.365604 0.682645
4 2020-01-05 0.917735 0.588230
.. ... ... ...
361 2020-12-27 0.225481 0.760843
362 2020-12-28 0.771604 0.435545
363 2020-12-29 0.227772 0.647130
364 2020-12-30 0.136732 0.873870
365 2020-12-31 0.976508 0.211952
тогда:
res = df.assign(year=df["date"].dt.year, week=df["date"].dt.week).groupby("week").mean()
res, соответственно, будет:
A B year
week
1 0.525900 0.684740 2020
2 0.708308 0.237837 2020
3 0.395369 0.367839 2020
4 0.584314 0.556200 2020
5 0.454147 0.665559 2020
6 0.400422 0.446337 2020
7 0.493830 0.329452 2020
8 0.381090 0.483078 2020
9 0.566580 0.480643 2020
10 0.652646 0.543519 2020
11 0.467229 0.470082 2020
12 0.478662 0.502610 2020
13 0.448953 0.510073 2020
14 0.404982 0.468422 2020
... # и т. д.