【发布时间】:2021-06-11 19:24:06
【问题描述】:
我的问题如下: 我有交通事故 (id_accident) 和乘客受害者 (id_victim) 的数据框 DF1 和事故日期 (date1)。
| id_accident | id_victim | date_accident | ROL |
|---|---|---|---|
| 123 | 23A | 2021/20/01 | PASSENGER |
| 456 | 12B | 2020/19/08 | PASSENGER |
| 111 | 41A | 2021/20/01 | PASSENGER |
| 222 | 54B | 2020/19/08 | PASSENGER |
我有另一个数据框 DF2 相同的车祸和更多 (id_accident) 和一般的 VICTIMS(可能是 ROLE_VICTIM = PASSENGER 或司机)和事故发生的日期(date1)
| id_accident | id_victim | date_accident | ROL |
|---|---|---|---|
| 001 | 23A | 2020/20/19 | PASSENGER |
| 002 | 12B | 2019/31/12 | DRIVER |
| 003 | 41A | 2020/20/12 | PASSENGER |
| 004 | 54B | 2020/20/07 | DRIVER |
因此,我需要为每个 id_accident 和 id_passenger 查找该乘客是否在过去 3 个月内发生过事故,但现在为 ROLE_VICTIM =DRIVER。
我的代码包含两个循环和一个函数,当这次事故的受害者是上一次事故的司机时,该函数会搜索以前的事故。
def siniestros_anteriores(DF2,dni_victima,date_accident):
result = DF2.loc[(DF2.siniestro_fecha_ocurrencia >= date_accident- pd.Timedelta(90, unit='d')) &
(DF2.siniestro_fecha_ocurrencia < date_accident) &
(DF2.poreservable_victima_dni == dni_victima) &
(DF2.poreservable_victima_condicion_desc =="DRIVER")]
if result.shape[0]==0:# si no encuentra nada--> no se activa la regla
return 0
else:
return 1
for id_sin in DF1.siniestro_id.unique():
df = DF1.loc[DF1.siniestro_id ==id_sin,:]
date_accident= df.loc[df.siniestro_id==id_sin,'siniestro_fecha_ocurrencia'].values[0]
for dni in df.poreservable_victima_dni.unique():
if (dni == "?") | (pd.isna(dni)):# si no hay dni--> directamente la regla es 0
result = [id_sin, dni, 0]
else:
r = siniestros_anteriores(DF2,dni,date_accident)
result = [id_sin,dni,r]
results.append(result)
有没有解决这个问题的有效方法?也许做一个 groupby + apply...但它不起作用...提前谢谢!
【问题讨论】:
-
您可以将数据样本作为文本发布吗?到目前为止,您尝试过什么?
-
@crayxt 我刚刚编辑了它:)
标签: python pandas function date