Я предлагаю это, если вы хотите, чтобы исходные даты были связаны с максимальными и минимальными значениями (на основе вопрос ):
import pandas as pd
import numpy as np
np.random.seed(13)
df = pd.DataFrame({"date":pd.date_range("2004-01-01", freq="D", periods=5000),
"value": np.random.randint(0,100,5000)})
df["day"] = df.date.dt.day
df["month"] = df.date.dt.month
df = df.set_index("date")
idx = df.groupby(['month', 'day'])['value'].transform(max) == df['value']
max_df = df[idx].sort_values(["month", "day"])
idx = df.groupby(['month', 'day'])['value'].transform(min) == df['value']
min_df = df[idx].sort_values(["month", "day"])
И результат, например, для max_df
:
value day month
date
2010-01-01 88 1 1
2008-01-02 88 2 1
2011-01-03 94 3 1
2009-01-04 98 4 1
2004-01-05 98 5 1
Вы можете иметь несколько строк для одного дня и месяца, если существует несколько максимумов.