繁体   English   中英

如何获得 dataframe 中两个重叠日期之间的范围?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM