Как уже отмечалось многими, HTML не является обычным языком, который может затруднить его синтаксический анализ. Мое решение состоит в том, чтобы превратить его в обычный язык, используя аккуратную программу, а затем использовать синтаксический анализатор XML для использования результатов. Для этого есть много хороших вариантов. Моя программа написана с использованием Java с библиотекой jtidy , чтобы превратить HTML в XML, а затем Jaxen в xpath в результат.
Вам нужно использовать Grouper
в вашем DataFrame. Использование mcve в приведенном выше вопросе:
# Month End
df.groupby(pd.Grouper(freq='M')).last()
# Month Start
df.groupby(pd.Grouper(freq='MS')).first()
Примечание. Группировка таким образом группируется по месяцу DateTimeIndex, чьи минимальные и максимальные месячные группы являются календарными и не обязательно входят в индекс.
Таким образом, мы можем пойти за нашей собственной группировкой, требующей внимания к месяцам, повторяющимся на протяжении многих лет.
grpr = df.groupby([df.index.year, df.index.month])
data = []
for g, gdf in grpr:
data.append(gdf.loc[gdf.index.min()])
data.append(gdf.loc[gdf.index.max()])
new_df = pd.DataFrame(data)
new_df
number 0 1 2
color green purple green purple green purple
1989-01-31 0.246601 0.915123 0.105688 0.645864 0.845655 0.339800
1989-01-31 0.246601 0.915123 0.105688 0.645864 0.845655 0.339800
1989-02-01 0.694509 0.665852 0.593890 0.715831 0.474022 0.011742
1989-02-13 0.770202 0.452575 0.935573 0.554261 0.235477 0.475279
2019-02-25 0.626251 0.826958 0.617132 0.118507 0.079782 0.183616
2019-02-28 0.740565 0.131821 0.968403 0.981093 0.211755 0.806868
2019-03-01 0.812805 0.379727 0.758403 0.345361 0.908825 0.166638
2019-03-08 0.238481 0.045592 0.740523 0.201989 0.432714 0.672510
Правильно видеть дублирование, потому что gdf.index.min()
может равняться gdf.index.max()
. Проверка устранит дублирование при переборе групп.