While循环连接panda数据帧

2024-09-28 19:23:35 发布

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

再次提前感谢您对我的任何帮助。我有一个数据集,它包含光纤网络上设备的所有值,从中心节点向下滚动到节点的多个放大器,最后到达连接到该节点的所有地址。在

问题是节点和地址之间可能有多个安培。我试图找出每个地址都附加到哪个节点。每个设备(地址、放大器、节点)都有一个ID、设备类型描述和上游设备ID。例如:

 ID:1 DEVICE_TYPE_DESC:ADDRESS UPSTREAM_DEVICE_ID: 2
 ID:2 DEVICE_TYPE_DESC:AMP UPSTREAM_DEVICE_ID: 3
 ID:3 DEVICE_TYPE_DESC:AMP UPSTREAM_DEVICE_ID: 4
 .....
 ID:10 DEVICE_TYPE_DESC:NODE UPSTREAM_DEVICE_ID: 9

所以我想加入ID:1到ID:10,但是要做到这一点,我需要加入到其中的每一个放大器。我是python新手,所以我不确定我要做的事情是否可行,但我正在创建一个while循环,它将再次迭代地连接到设备表,并创建一个标志,当join引入节点时,它将变为1,当node_flag=len(address_table)的和时停止。在

我编写了第一轮手动连接的代码,并部分编写了我认为while循环的一般外观。我现在面临的主要问题是如何每次都重新命名右表中的列,然后使用最近添加的“上游设备”id作为下一次联接迭代的左键。ADD\u DEV是从设备中筛选出来的只包含地址的表。NO_ADD是来自设备的第二个筛选表,它包含除地址之外的所有内容

^{pr2}$

因此,最后的add_dev dataframe将具有'x'+1个id、device_type_id和上游的\u device_id列。但我知道我不能像上面那样用[x]重命名列。有什么想法,我怎么能让它工作?在


Tags: 数据addid节点device地址type中心
1条回答
网友
1楼 · 发布于 2024-09-28 19:23:35

明白了。希望这能帮助任何有类似问题的人。在

add_dev = device[device["device_type"]=="address"]

add_dev["join_left"]=add_dev["upstream_device_id"]

count = add_dev.shape[0]
x=0

while count>0:
  x+=1
  add_dev = add_dev.merge(
       no_add[["id","device_type","upstream_device_id"]].rename(
           index=str, columns={
               "id":"id_"+str(x), 
               "device_type":"device_type_"+str(x),
               "upstream_device_id":"upstream_device_id_"+str(x)
           }), 
     how="left",
     left_on="join_left",
     right_on="id_"+str(x)
  )

  add_dev["node_flag"]=np.where(add_dev["device_type_"+str(x)]=='node',1,0)
  add_dev["join_left"] = np.where(add_dev["node_flag"] == 1, -999, add_dev["upstream_device_id_"+str(x)])
  count = add_dev.shape[0]-add_dev["node_flag"].sum()

相关问题 更多 >