将一列中的日期与其他列的 headers 进行比较,并根据 Python 中的比较生成一个虚拟对象

Compare the date in a column to headers of other columns and generate a dummy based on the comparison in Python

我有一个包含 10 列的数据框。第一列包含一些日期。其他 9 列的 headers 是一些其他日期。这 9 列的值是 pre-set 到零。

我想将第一列中的日期值与其他 9 列的每个 header 进行比较,如果满足特定条件,则将值从 0 更改为 1。例如,如果第一列中的日期在每个 header 日期之前的 5 年期间内,请将值从 0 更改为 1。示例如下:

起始数据帧:

date 04-Feb-94 31-Jan-96 19-Aug-97 18-Apr-01
07/26/90 0 0 0 0
05/08/95 0 0 0 0
03/10/98 0 0 0 0

期望的输出:

date 04-Feb-94 31-Jan-96 19-Aug-97 18-Apr-01
07/26/90 1 0 0 0
05/08/95 0 1 1 0
03/10/98 0 0 0 1

谢谢。

好吧,让我们开始吧!

1. 首先,您需要将“列名”(header) 转换为日期格式 (别名时间戳) 像这样:

df.columns = df.columns[:1].tolist() + pd.to_datetime(df.columns[1:]).tolist()

1.1 那么你也必须将“日期”列转换为日期格式:

df.date = pd.to_datetime(df.date)

2. 现在我们可以使用 for 循环进行第 12 次比较(列 43 行*),同时相应地更新单元格值当我们符合条件时:

for i in df.columns[1:]:
  for j in range(len(df.date)):
    if df.date[j] < i < (df.date[j] + pd.offsets.DateOffset(years=5)):
      df.at[j, i] = 1

3. 输出:

index date 1994-02-04 00:00:00 1996-01-31 00:00:00 1997-08-19 00:00:00 2001-04-18 00:00:00
0 1990-07-26 00:00:00 1 0 0 0
1 1995-05-08 00:00:00 0 1 1 0
2 1998-03-10 00:00:00 0 0 0 1