Создайте двоичный столбец для вхождения

У меня есть фрейм данных panadas, который в основном представляет собой агрегированное представление о том, что происходит в определенный день. Однако не все дни включены в четырехмесячное окно. Например,

dates = ['2019-02-27', '2019-02-16', '2019-02-01', '2019-01-15']
count_s = [2,3,4,5]
df = pd.DataFrame({'dates': dates, 'count': count_s})
df["dates_ind"] = pd.to_datetime(df["dates"], format = "%Y-%m-%d")
df.index = pd.DatetimeIndex(df["dates_ind"])

Мне нужно создать новый фрейм данных, в котором есть все дни (4 месяца по отношению к сегодняшнему дню). Если даты совпадают между двумя кадрами данных (новый и df), мне нужно создать новый столбец из 1 или 0. Если он существует в df, он должен быть отмечен 1 или 0.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

col = df.dates.apply(lambda x: 1 if x in dates else 0)

вы можете заменить «col» на имя столбца фрейма данных.

в течение 4 месяцев относительного. Вы можете использовать pd.offsets.MonthBegin, а затем использовать конечный эксклюзивный дневной диапазон дат:

dts = pd.date_range(month_start, month_start + pd.offsets.MonthBegin(1), closed = "left")

Обратите внимание, что month_start должен быть datetime.datetime, а не строкой.

Это не включает все дни (относительно 4 месяцев)

Bryce Ramgovind 06.03.2019 16:49
Ответ принят как подходящий

Создайте свой new_df с помощью pd.date_range, затем проверьте, есть ли индекс в вашем другом DataFrame. pd.offsets.DateOffset(months=4) дает вам вычитание календарного месяца, которое не будет пересекать границы месяца, когда в месяцах разное количество дней.

import pandas as pd

today = pd.to_datetime('today').normalize()
df_new = pd.DataFrame(index=pd.date_range(today-pd.offsets.DateOffset(months=4),
                                          today, freq='D'))

df_new['exist'] = df_new.index.isin(df.index).astype(int)

Выход: df_new

            exist
2018-11-06      0
2018-11-07      0
2018-11-08      0
...
2019-02-26      0
2019-02-27      1
2019-02-28      0
2019-03-01      0
2019-03-02      0
2019-03-03      0
2019-03-04      0
2019-03-05      0
2019-03-06      0

Другие вопросы по теме