[英]How can I get the range between two overlapping dates in a dataframe?
I have a dataset here - https://docs.google.com/spreadsheets/d/e/2PACX-1vSBxKr2RNSNBt1WLWyqnoBKFPI2YvACVqZpqmmdIR5buI2lF3I76Ta3rIoiirHkxin6guH_ywGsPzc1/pub?gid=1429325005&single=true&output=csv
如果该“位置”的“日期”介于该位置的“risk_from”和“risk_to”日期之间,我想将功能“警告”设为 Y。 如果不是,“警告”必须是 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”。 我可以在这里使用这个答案找到日期之间的范围,但我无法实现我想要的。 所以寻求专家的建议。
在读取 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')
Output
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.