python - 使用 Pandas DataFrame 逐行查找过去 6 个月的事件
问题描述
假设我有一个这样的数据集:
id_police id_sinistre datesurv
0 p123 s120 01/01/2018
1 p123 s121 03/01/2018
2 p123 s122 05/05/2018
3 p222 s123 04/05/2018
4 p222 s124 02/12/2018
5 p433 s125 07/08/2018
6 p433 s126 08/09/2018
7 p433 s127 10/10/2018
我的目标是找到id_police
每行在过去 6 个月中的最后一次出现,如下所示:
id_police id_sinistre datesurv occ
0 p123 s120 01/01/2018 0
1 p123 s121 03/01/2018 1
2 p123 s122 05/05/2018 2
3 p222 s123 04/05/2018 0
4 p222 s124 02/12/2018 0
5 p433 s125 07/08/2018 0
6 p433 s126 08/09/2018 1
7 p433 s127 10/10/2018 2
我想我需要.duplicated
或者.groupby
但我不知道如何使用它们......提前感谢您的帮助!
解决方案
如果 6 个月应简化为 6 * 30 天,请使用自定义 lambda 函数diff
,按值和最后累积总和进行比较:
df['datesurv'] = pd.to_datetime(df['datesurv'], dayfirst=True)
df = df.sort_values(['id_police','datesurv'])
f = lambda x: (x.diff().dt.days < 30 * 6).cumsum()
df['occ'] = df.groupby('id_police')['datesurv'].apply(f)
print (df)
id_police id_sinistre datesurv occ
0 p123 s120 2018-01-01 0
1 p123 s121 2018-01-03 1
2 p123 s122 2018-05-05 2
3 p222 s123 2018-05-04 0
4 p222 s124 2018-12-02 0
5 p433 s125 2018-08-07 0
6 p433 s126 2018-09-08 1
7 p433 s127 2018-10-10 2
推荐阅读
- python - Discord bot 随机下线;没有错误;仅通过 PuTTy 重启
- mysql - 如何将相同的 Ids 数据与 mysql 合并?
- scala - Scala 工作表未在 Intellij Community 2020.1 中显示输出
- javascript - 有没有办法在 Google Apps 脚本中创建一个每秒增加一分钟的 for 循环?
- tensorflow - 卷积神经网络中的 CIFAR-10 数据格式错误
- python - id'sin python 的总和
- python - Tor 上的 SSH 隧道
- opencl - OpenCL Nvidia GPU 上的小型恒定内存大小
- python - 在将字典映射到数据框时使用多列
- php - 如何在我的 PHP switch 语句中修复此错误?未定义的索引