首页 > 解决方案 > 如何从数据框中映射值并获取最后更新

问题描述

我遇到了一个问题,因为如果重复值,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

标签: pandasdictionarymapping

解决方案


df1.merge(df2[~df2.duplicated('Obvserved_Today',keep='last')], how='left', on='Obvserved_Today')

这将具有名为“Ticket”而不是“Last Ticket”和“Date”而不是“Last update”的列。如果需要,您可以在合并后重命名。

这段代码在做什么?

它正在合并两个数据帧(查看on=列并匹配相同的值),但只查看第二个数据帧的最后一个观察值的行。


推荐阅读