Вам нужно использовать 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()
. Проверка устранит дублирование при переборе групп.
Приятно видеть, что кто-то вмешивается в Lucene - потому что я понятия не имею об этом.
Сфинкса, с другой стороны, я знаю достаточно хорошо, так что давайте посмотрим, смогу ли я чем-нибудь помочь.
Я понятия не имею, насколько это применимо к вашей ситуации, но Эван Уивер сравнил несколько распространенных вариантов поиска Rails (Sphinx, Ferret (порт Lucene для Ruby) и Solr), выполнение некоторых тестов. Думаю, может быть полезно.
Я не разбирался в полнотекстовом поиске MySQL, но знаю, что он не конкурирует ни по скорости, ни по функциям со Sphinx, Lucene или Solr.
Я не знаю Sphinx, но что касается Lucene и полнотекстового поиска в базе данных, я думаю, что производительность Lucene не имеет себе равных. Вы должны быть в состоянии почти выполнять любой поиск менее чем за 10 мс, независимо от того, сколько записей вам нужно искать, при условии, что вы правильно настроили свой индекс Lucene.
Вот самое большое препятствие хотя: лично я думаю, что интегрировать Lucene в ваш проект нелегко . Конечно, его не так сложно настроить, чтобы вы могли выполнить какой-то базовый поиск, но если вы хотите получить максимальную отдачу от него при оптимальной производительности, то вам определенно нужна хорошая книга о Lucene.
Что касается Требования к ЦП и ОЗУ, выполнение поиска в Lucene не слишком загружает ваш ЦП, хотя индексация данных есть, хотя вы делаете это не слишком часто (возможно, один или два раза в день), так что это не является большим препятствием.
Он не отвечает на все ваши вопросы, но вкратце, если у вас есть много данных для поиска и вы хотите отличную производительность, то я думаю, что Lucene определенно подходит идти. Если у вас не будет такого большого количества данных для поиска, то вы можете также использовать полнотекстовый поиск в базе данных. Настройка полнотекстового поиска MySQL определенно проще в моей книге.
Я сейчас смотрю на полнотекстовый поиск PostgreSQL, и он имеет все необходимые функции современной поисковой системы, действительно хорошие расширенные символы и многоязычную поддержку, отличную тесную интеграцию с текстовыми полями в базе данных.
Но у него нет удобных операторов поиска, таких как + или AND (использует & |!), И я не в восторге от того, как они работают на их сайте документации. Хотя в фрагментах результатов условия соответствия выделены жирным шрифтом, алгоритм по умолчанию, для которого условия соответствия не очень хорош. Кроме того, если вы хотите проиндексировать rtf, PDF, MS Office, вам нужно найти и интегрировать конвертер форматов файлов.
OTOH, это намного лучше, чем текстовый поиск MySQL, который даже не индексирует слова из трех букв или меньше. Это значение по умолчанию для поиска MediaWiki, и я действительно так думаю » не годится для конечных пользователей: http://www.searchtools.com/analysis/mediawiki-search/
Во всех случаях, которые я видел, Lucene / Solr и Sphinx действительно хороши . Они представляют собой надежный код и претерпели значительные улучшения в удобстве использования, поэтому все инструменты предназначены для выполнения поиска, удовлетворяющего почти всех.
для SHAILI - SOLR включает библиотеку кода поиска Lucene и имеет компоненты, которые должны быть хорошей подставкой. - одна поисковая система.
SearchTools-Avi сказал: «Текстовый поиск MySQL, который даже не индексирует слова из трех букв или меньше. "
К сведению, минимальная длина слова MySQL для полнотекстового поиска регулируется, начиная с по крайней мере MySQL 5.0. Google 'mysql fulltext min length' для простых инструкций.
Тем не менее, у MySQL fulltext есть ограничения: во-первых, он медленно обновляется, когда вы достигаете миллиона записей или около того ...