python需要用逻辑进行合并和重写吗?

2024-04-27 03:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

示例表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、端口和设备类型,并从路由器删除数据。 如果不存在副本,则使用来自路由器的数据

这是用简单的逻辑实现的还是需要复杂的函数


Tags: 数据noneiddataportaddressdevicemac
1条回答
网友
1楼 · 发布于 2024-04-27 03:22:05

您可以连接两个数据帧,按设备类型对其排序,然后为每个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

相关问题 更多 >