将一列中的日期与其他列的 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
我有一个包含 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 |