你能告诉我一种优化代码的方法吗?由于数据集很大,需要几十分钟才能完成。。。在
df['sinistre'] = 0
for index_sin, row_sin in sinistre1.iterrows():
date_surv = row_sin['DATESURV']
quit_sin = df.loc[df['id_police'] == row_sin['id_police']]
for index, row in quit_sin.iterrows():
if row['DATEEFFE'] < date_surv < row['DATE_FIN']:
df['sinistre'][index] = 1
以下是数据帧sinistre1
和df
的示例数据集:
这是预期的输出(想法是当sinistre1
中的DATESURV在区间DATEEFFE
&;DATE_FIN
内时,我标记sinistre):
id_police DATEEFFE DATE_FIN prime prime2 sinistre
0 p123 24/01/2017 24/02/2017 0 0 0
1 p123 24/11/2017 24/12/2017 0 30 1
2 p123 25/02/2018 25/03/2018 10 10 1
3 b123 24/02/2018 24/03/2018 20 20 1
4 b123 24/03/2018 24/04/2018 30 0 0
如果我不能避免for循环,那么请给出一个更好的方法来更快地循环。。。提前谢谢!在
使用:
sinistre1
left
join一起用于数据inclusive=True
按^{sinistre1
中的列s
sinistre1
,方法是用^{s
进行检查,转换为整数到True/False
到{编辑:
^{pr2}$即(未测试):
正如我在评论中所说。接受的答案和合并现在没有意义,因为我认为OP希望比较两个数据帧中的每一行,因此也需要数据帧
df
中的键id_sinistre
。或希望使用combine_first
如下所示:相关问题 更多 >
编程相关推荐