РЕДАКТИРОВАТЬ: еще один метод, который работает без индексов DateTime, это pd.cut ().
df.groupby(pd.cut(df.days, bins=3,
precision=0))["rainfall"].sum()
days
(1.0, 8.0] 4.83
(8.0, 14.0] 0.45
(14.0, 21.0] 0.05
Метод вырезания позволяет вам указать диапазон частот для значений бина.
pd.cut(df.days, bins=3)
- это способ сказать «возьми серию df [« дни »] и раздели ее на три части». Если вы запустите этот код один, вы увидите:
0 (1.0, 8.0]
1 (1.0, 8.0]
2 (1.0, 8.0]
.
.
.
19 (14.0, 21.0]
20 (14.0, 21.0]
Он помечает каждую строку в вашем DataFrame тем, к какому бину он принадлежит. Затем вы можете использовать его в качестве аргумента в выражении groupby, как и любой другойатрибут столбца и применить статистическую функцию.
Помещение ["rainfall"] вне оператора groupby является способом сказать: "Это столбец, который я хочу получить суммой" (т. е. не суммируйтедней). Вы можете поочередно написать это сначала, если это более интуитивно понятно. (Это здорово, а также расстраивает, что у панд есть более чем один и только один правильный способ сделать что-то.)
df["rainfall"].groupby(...)
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Для совокупной статистики вы можетеиспользуйте pd.resample (). Это метод индекса DateTime (мне пришлось немного привести его здесь, но обычно у вас будет больше информации о погодных метках).
df.resample("W").sum()["rainfall"]
- это код для сокращения дней до недель и агрегирования значений.
В этом случае я создал DataFrame из словаря и преобразовал индекс в формат DateTime, чтобы использовать метод повторной выборки:
df = pd.DataFrame(
data={
"days": (list(range(1,22))),
"rainfall": [3.51,
1.32, 0, 0, 0, 0, 0, 0, 0.03,
0, 0, 0.17, 0.23, 0.02, 0, 0,
0, 0.03, 0.02, 0, 0]},
index=pd.to_datetime(list(range(1,22)), format="%d",
errors="coerce"))
, который возвращает вас:
1900-01-07 4.83
1900-01-14 0.45
1900-01-21 0.05
Freq: W-SUN, Name: rainfall, dtype: float64
Опять же, вам нужно соответствующим образом настроить год и месяц, но приятная вещь в повторной выборке заключается в том, что вы можете легко агрегировать по заранее заданным временным интервалам (неделям, дням, минутам и т. Д.) И пользовательским диапазонам.