我有两个数据帧,数据如下:
示例表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
我想做的是优先使用switch合并带有覆盖的列...即,如果存在Mac重复的Mac地址,并且它具有作为device_type的路由器和交换机,我想合并device_id,port ,以及来自交换机的device_type并从路由器中删除数据。 如果不存在重复项,请使用路由器中的数据。
这是否可能通过简单的逻辑还是需要复杂的功能?
答案 0 :(得分:1)
您可以将两个数据帧连接起来,按设备类型对其进行排序,然后为每个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