Pandas - возвращает последний / первый день месяца в пользовательском указателе даты и времени

Как уже отмечалось многими, HTML не является обычным языком, который может затруднить его синтаксический анализ. Мое решение состоит в том, чтобы превратить его в обычный язык, используя аккуратную программу, а затем использовать синтаксический анализатор XML для использования результатов. Для этого есть много хороших вариантов. Моя программа написана с использованием Java с библиотекой jtidy , чтобы превратить HTML в XML, а затем Jaxen в xpath в результат.

0
задан Rich Andrews 18 March 2019 в 01:56
поделиться

1 ответ

Вам нужно использовать 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(). Проверка устранит дублирование при переборе групп.

0
ответ дан Rich Andrews 18 March 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: