如何映射数据框中的值并获取最后更新
How to map values from a dataframe and get the last update
我遇到了一个问题,因为 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,所以我已经有了 historics 的第二个数据框 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=
列并匹配相同的值)但只查看第二个数据框的最后一个观察行。
我遇到了一个问题,因为 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,所以我已经有了 historics 的第二个数据框 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=
列并匹配相同的值)但只查看第二个数据框的最后一个观察行。