Python 为事件创建一个二进制列

Python 为事件创建一个二进制列,python,pandas,Python,Pandas,我有一个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"], fo

我有一个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个月)。如果日期对应于两个数据帧(new和
df
),我需要创建一个1或0的新列。如果它存在于
df
中,则应标记为1或0

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,而不是字符串。

使用
pd.date_范围创建
新的\u df
,然后检查索引是否在其他
数据框中
pd.offset.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

不包括所有天数(相对4个月)
            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