python-使用逻辑进行合并和重写?

python-使用逻辑进行合并和重写?,python,pandas,merge,Python,Pandas,Merge,我有两个数据框,数据相似,如下所示: 样本表1: device_id device_type ip_address mac_address port vlan 89 Router 10.10.10.13 ad3d.bb39.484a None 5.0 89 Router 10.10.10.21 0010.1d1a.7b67 None 5.0 89 Router

我有两个数据框,数据相似,如下所示:

样本表1:

device_id device_type     ip_address     mac_address     port  vlan
       89      Router   10.10.10.13  ad3d.bb39.484a     None   5.0
       89      Router   10.10.10.21  0010.1d1a.7b67     None   5.0
       89      Router   10.10.10.22  0010.4d5a.768d     None   5.0
       89      Router   10.10.10.23  0010.096a.7a8c     None   5.0
样本表2:

device_id device_type     mac_address      port
      305      Switch  ad3d.bb39.484a   Gi1/0/3
      305      Switch  0010.1d1a.7b67   Gi1/0/4
      305      Switch  0010.4d5a.768d   Gi1/0/2
      305      Switch  9a72.2dad.21f0  Gi1/0/22
我想在Mac地址上合并这两个地址,目前已完成

temp_merged_data = arp_data.merge(mac_data, on='mac_address', how='left')
这提供了数据

device_id_x device_type_x   ip_address     mac_address     port_x  vlan  device_id_y  device_type_y      port_y 
         89      Router     10.10.10.13  ad3d.bb39.484a      None   5.0          305         Router     Gi1/0/3
         89      Router     10.10.10.21  0010.1d1a.7b67      None   5.0          305         Router     Gi1/0/4
         89      Router     10.10.10.22  0010.4d5a.768d      None   5.0          305         Router     Gi1/0/2
         89      Router     10.10.10.23  0010.096a.7a8c      None   5.0          305         Router    Gi1/0/22
我想做的是合并列与覆盖,优先开关。。。i、 e.如果存在一个Mac重复Mac地址,并且它有一个路由器和一个交换机作为设备类型,我想从交换机合并设备id、端口和设备类型,并从路由器中删除数据。 如果不存在副本,则使用来自路由器的数据


这是简单的逻辑实现的还是需要复杂的功能?

您可以将两个数据帧连接起来,按设备类型对它们进行排序,然后为每个mac地址选择第一个条目:

>>> pd.concat([arp_data, mac_data]) \
      .sort_values("device_type", ascending=False) \
      .groupby("mac_address").first() \
      .reset_index()

      mac_address  device_id device_type   ip_address      port  vlan
0  0010.096a.7a8c         89      Router  10.10.10.23      None   5.0
1  0010.1d1a.7b67        305      Switch  10.10.10.21   Gi1/0/4   5.0
2  0010.4d5a.768d        305      Switch  10.10.10.22   Gi1/0/2   5.0
3  9a72.2dad.21f0        305      Switch          NaN  Gi1/0/22   NaN
4  ad3d.bb39.484a        305      Switch  10.10.10.13   Gi1/0/3   5.0

您能否添加所需输出的示例?第一个条目是什么?路由器是否总是第一个条目,因为它是arp_数据中的第一个条目?第2行按设备_类型按字母顺序降序排列表格,因此交换机将位于路由器之前。这是相当粗糙的,你可以定义一个定制的订单,如果你有其他的价值要考虑。不会有任何其他类型,这样会工作得很好。谢谢有什么理由不在合并中包括记录吗?我在arp_数据中有114条记录,但在合并中只有95条……这段代码只为任何mac地址保留一条全局记录。在arp_数据中,同一mac地址可能有多个条目?您可以使用.groupbymac_address.size轻松检查。