pandas - 如何从数据框中映射值并获取最后更新
问题描述
我遇到了一个问题,因为如果重复值,map() 不允许我映射值。场景是这样的。
我有这个每日观察的df1
Obvserved_Today A B
0 192.168.1.1 3 2
1 192.168.1.3 1 3
2 192.168.1.4 1 5
3 192.168.1.5 2 9
我想通过添加两列历史数据来更新该df,所以我已经有了第二个历史数据帧df2
IP_Historical Ticket Date
0 192.168.1.1 3001 11/01/2020
1 192.168.1.1 3002 11/02/2020
2 192.168.1.3 3003 11/03/2020
3 192.168.1.5 3004 11/04/2020
4 192.168.1.5 3005 11/05/2020
我想要一个像下面这样的输出,我想再添加两列,第一列包含在历史 df2 中看到的最后一张票,第二张也来自历史 df2,如果没有匹配,则最后看到日期它为 NaN 或 0。
Obvserved_Today A B Last Ticket Last update
0 192.168.1.1 3 2 3002 11/02/2020
1 192.168.1.3 1 3 3003 11/03/2020
2 192.168.1.4 1 5 0 0
3 192.168.1.5 2 9 3005 11/05/2020
解决方案
df1.merge(df2[~df2.duplicated('Obvserved_Today',keep='last')], how='left', on='Obvserved_Today')
这将具有名为“Ticket”而不是“Last Ticket”和“Date”而不是“Last update”的列。如果需要,您可以在合并后重命名。
这段代码在做什么?
它正在合并两个数据帧(查看on=
列并匹配相同的值),但只查看第二个数据帧的最后一个观察值的行。
推荐阅读
- github - 如何制作 GitHub README.md 渲染
- php - 将数据发送到 Web 服务的 SOAP curl 错误:“服务器无法处理请求。”
- python - tensorflow.GraphDef 在序列化过程中被同时修改
- python - 如何根据 Google Sheets API 正确打印对象列表属性?
- azure - 查询重复更新的 Azure 数据库的最佳实践
- ios - 如何将多个参数传递给 Swift #selector?
- xml - 如何使用 XMLReader 变量读取值?
- sql - 为什么 Redshift datediff 在天数相同的情况下给出不同的周数?
- shell - 如何使用 Dimporttsv 将 csv 文件从 hdfs 加载到 hbase 表
- ssis - 脚本任务在 visual-studio-2017 (SSDT) 中不起作用