如果该"location"的"date"落在该位置的"risk_from"和"risk_to"日期之间,我想将特征"warning"设为Y。如果不是,则"warning"必须为N。
像这样:
location case date risk_from risk_to warning
A 2/1/2021 N
A Confirmed 2/2/2021 2/2/2021 2/4/2021 Y
A 2/3/2021 Y
A Confirmed 2/4/2021 2/4/2021 2/6/2021 Y
A 2/5/2021 Y
A 2/6/2021 Y
A 2/7/2021 N
B Confirmed 2/8/2021 2/8/2021 2/10/2021 Y
B 2/9/2021 Y
B 2/10/2021 Y
B 2/11/2021 N
B 2/12/2021 N
我试图找到risk_from和risk_to日期的范围,并将它们组合在一起。之后,我尝试检查每个当前日期。如果它们在集合中,则警告为"Y",如果不是,则警告为“ N". I可以使用此答案这里找到日期之间的范围,但我无法实现我想要的。因此,请寻求专家的建议。
分析解答
读取CSV文件时,请使用parse_dates
参数。填写缺失的风险列值,然后将它们与日期列进行比较。
risk_cols = ['risk_from', 'risk_to']
df = pd.read_csv('Book1 - Book1.csv', parse_dates=['date'] + risk_cols)
df[risk_cols] = df.groupby('location')[risk_cols].apply(lambda x: x.ffill().bfill())
df['warning_out'] = np.where(df.date.between(df.risk_from, df.risk_to), 'Y', 'N')
输出
location case date risk_from risk_to warning warning_out
0 A NaN 2021-02-01 2021-02-02 2021-02-04 N N
1 A Confirmed 2021-02-02 2021-02-02 2021-02-04 Y Y
2 A NaN 2021-02-03 2021-02-02 2021-02-04 Y Y
3 A Confirmed 2021-02-04 2021-02-04 2021-02-06 Y Y
4 A NaN 2021-02-05 2021-02-04 2021-02-06 Y Y
5 A NaN 2021-02-06 2021-02-04 2021-02-06 Y Y
6 A NaN 2021-02-07 2021-02-04 2021-02-06 N N
7 B Confirmed 2021-02-08 2021-02-08 2021-02-10 Y Y
8 B NaN 2021-02-09 2021-02-08 2021-02-10 Y Y
9 B NaN 2021-02-10 2021-02-08 2021-02-10 Y Y
10 B NaN 2021-02-11 2021-02-08 2021-02-10 N N
11 B NaN 2021-02-12 2021-02-08 2021-02-10 N N