python-使用逻辑进行合并和重写?
我有两个数据框,数据相似,如下所示: 样本表1: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
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轻松检查。