两张表如下:

表1:

表2:

需求: 按照表1的“用户唯一ID”,在表2 中找到对应的“客户风险等级”和“评估日期”

难点: 每个“用户唯一ID”对对应不同“评估日期”日期下的“客户风险等级”,所以不能简单的使用pd.merge()

解决方法: 双层循环,找到时间差小的“评估日期”作为当前用户的“客户风险等级”,同时为了体现是最近的信息,必须保证

# 客户风险表
## 因为每个用户在不同时期会有不同的风险等级,所以这里需要一个一个迭代,去匹配与当前交易日期最接近的评估日期下的风险等级
custom_risk = pd.read_csv("./数据表/e.csv", header = 0, names = ["用户唯一ID", "客户风险等级", "评估日期"])
custom_risk["评估日期"] = custom_risk["评估日期"].map(lambda x: "-".join([str(x)[0:4], str(x)[4:6], str(x)[6:]]))
custom_risk["评估日期"] = pd.to_datetime(custom_risk["评估日期"], format = "%Y/%m/%d")
risk_1 = [] # 记录客户风险等级
risk_2 = [] # 记录评估日期
risk_3 = [] # 记录record_miss, 1表示miss
for r in tqdm(range(len(df))):cur_risk = custom_risk[custom_risk["用户唯一ID"] == df.iloc[r]["用户唯一ID"]]if(len(cur_risk) == 0):risk_1.append(float('nan'))risk_2.append(float('nan'))risk_3.append(float('nan'))continuem = pd.Timedelta(days=100000)record_correct = -1 # 什么情况是正确的?即:评估时间小于交易日期,且与交易日期最接近record_miss = 0     # 什么情况是丢失的?即:评估时间大于交易日期,且与交易日期最接近,这个有可能不准,但是也有一定的参考性,for r1 in range(len(cur_risk)):if abs(cur_risk.iloc[r1]["评估日期"] - df.iloc[r]["交易日期"]) < m and (cur_risk.iloc[r1]["评估日期"] < df.iloc[r]["交易日期"]):m = abs(cur_risk.iloc[r1]["评估日期"] - df.iloc[r]["交易日期"])record_correct = r1if record_correct == -1: # 说明当前的交易日期之前,没有进行风险评估m = pd.Timedelta(days=100000)for r1 in range(len(cur_risk)):if abs(cur_risk.iloc[r1]["评估日期"] - df.iloc[r]["交易日期"]) < m:m = abs(cur_risk.iloc[r1]["评估日期"] - df.iloc[r]["交易日期"])record_miss = r1risk_1.append(cur_risk.iloc[record_miss]["客户风险等级"])risk_2.append(cur_risk.iloc[record_miss]["评估日期"])risk_3.append(1)else:risk_1.append(cur_risk.iloc[record_correct]["客户风险等级"])risk_2.append(cur_risk.iloc[record_correct]["评估日期"])risk_3.append(0)
df["客户风险等级"] = risk_1
df["客户风险等级_评估日期"] = risk_2
df["客户风险等级_没有被评估"] = risk_3
del risk_1
del risk_2
del risk_3
gc.collect()

就是有点慢,因为数据太多了,200万条,没其他问题。

panda语法:

# 设置一个最小值m = pd.Timedelta(days=100000)# pandas的Time直接相减abs(cur_risk.iloc[r1]["评估日期"] - df.iloc[r]["交易日期"]) < m

pandas时间序列相减,找出时间最接近的相关推荐

  1. 在numpy与pandas中,快速找出mode(众数)

    在numpy与pandas中,快速找出mode(众数) 一位朋友突然问我说,numpy中,如何找出一维数组和二维数组(矩阵)中的mode,我当然说我知道怎么找啊,等我回家后再写一下代码就知道了..., ...

  2. oracle中那个日期怎么相减_oracle日期时间加减规则

    1.日期的加减都是以天为单位的 SELECT to_date('2016-07-05 13:10:00','yyyy-mm-dd hh24:mi:ss') + 1 FROM dual; 结果:2016 ...

  3. js 时间戳相减算出年月日

    export const Date = (date1, date2) => {console.log(date1, date2);let str = '';let state = new Dat ...

  4. matlab时间字符串相减,Matlab中时间字符串处理总结

    Matlab的日期与时间处理 Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646, ...

  5. java找出和最接近指定值_如何找到数组元素与特定值最接近的和?

    小编典典 对于这种问题,通常将使用动态编程.但是,本质上可以归结为保留一组可能的总和,然后将输入值一个接一个地添加,如以下代码所示,并且具有相同的渐近运行时间:O(n K),其中n输入数组的大小和K目 ...

  6. html 两个时间戳相减,表格里两列时间点如何相减

    EXCEL表中如何让两列时间相减 两列时间,格式是常规,显示如:24时20分,如果我直接相减(比如C1=A1-B时间是特殊的数值形式,直接相减即可 Excel版本参考:2010 测试数据在A1和A2单 ...

  7. hive时间相减转分钟

    --第一个时间是正规格式:2022-07-16 13:56:03 --第二个时间后面多个0:2022-07-16 13:06:47.0 需要substr一下把后面的0去掉select ftrade_g ...

  8. PHP时间相减获得剩余天数小时数分钟数

    php 把秒数转换为时长(h:i:s格式) /** * 把秒数转换为时分秒的格式 * @param Int $times 时间,单位 秒 * @return String */ function se ...

  9. 二、python时间序列数据的相减

    在此记录自己学习python数据分析过程中学到的一些数据处理的小技巧.本节主要分享时间数据的相减. 1.将读取的时间序列数据转化为timestamp格式 #导入numpy库和pandas库 impor ...

最新文章

  1. 5G NR — 频率、频段、载波、载频、载波带宽
  2. “网红” WebAssembly 与 K8s 如何实现双剑合璧?
  3. 事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
  4. c++面试准备之螺旋队列
  5. 5/7 SELECT语句:过滤(LIKE使用通配符)
  6. 如何有效的使用对话框之二
  7. Java继承注意事项难点理解
  8. exit()函数_complete函数
  9. Web图形开发方案选型,SVG/VML/Flash/Applet优劣比较
  10. SSM中log4j2.xml配置文件的各项标签
  11. 火星舱如何备份oracle_倒计时!火星,我们来了
  12. python自学-Python 应该怎么学?
  13. 【廖雪峰官方网站/Java教程】设计模式(二)
  14. vba 字体颜色_Excel填充单元格颜色和改变字体颜色,用VBA是怎样实现的呢?
  15. Java 面试题目最全集合1000+ 大放送,能答对70%就去BATJTMD
  16. c# export server 调用sql_C# 如何调用 SPL 脚本
  17. 指针的意义和linux的内存回收艺术
  18. 【机器人学习】平台并联机构matlab逆解
  19. 计算机网络体系结构-虚拟专用网
  20. 存储及可编程是未来物联网芯片发展的关键

热门文章

  1. 测试同学都应该知道的断言知识...
  2. 使用伪元素插入图片大小调整问题
  3. PostgreSQL查询用户密码密码解密修改密码
  4. 数据结构视频教程 -《数据结构深度实战专题班 C语言版(国嵌 唐老师主讲)(非常犀利)》
  5. 用Python来自动玩放置类游戏,就是你了《剑与远征》
  6. 小白初窥VR世界的通行证?浅聊 PCVR 串流软件 Virtual Desktop - VR与串流篇 上
  7. 微信小程序| 用小程序复刻微信Wechat
  8. 哥德尔(Kurt Godel)的预言实现了
  9. 计算机弹奏爱情码头,转发人事部关于全国专业技术人员计算机应用能力考试的通知...
  10. springboot项目热部署