python - 使用 Pandas 合并数据框

标签 python pandas dataframe merge concat

我正在尝试将两个数据框合并在一起以创建一个简洁的数据框。第一个数据帧包含各种网络设备的所有可能名称。第二个数据框包含实际存在的网络设备的名称,以及它们对应的硬件。

我需要将这两个数据帧合并在一起,以便根据第二个数据帧中存在的内容“检查”第一个数据帧中的设备名称,然后吐出相应的硬件以便稍后执行进一步分析。

这是我正在做的事情的简化说明:


print(df1)

Router_Name     Firewall_Name       
0   router1     firewall1          
1   router2     firewall2          
2   router3     firewall3          
3   router4     firewall4

print(df2)

Device_Name     Hardware_Platform
0   router2         cisco111
1   router3         cisco222
2   firewall1       cisco333
3   firewall2       cisco444

这将是执行合并后我想要的结果:

print (df3)

Router_Name   Hardware_Platform  Firewall_Name    Hardware_Platform  
0   router1           N/A                firewall1        cisco333   
1   router2           cisco111           firewall2        cisco444
2   router3           cisco222           firewall3        N/A  
3   router4           N/A                firewall4        N/A



我尝试了很多命令,包括:

result = pd.concat([df1, df2], axis=1).reindex(df2.index)
print(result)

但这只会导致 df1 和 df2 相互堆叠。甚至可以使用这种方法吗?

最佳答案

我在下面的示例中得到了它(重命名列有点麻烦),但是这个示例已经足够清楚了。我使用您的示例数据框作为输入文件。此外,我使用了两个左连接并从 hardware_platform 列创建了两列。

第 1 步:创建数据框

import pandas as pd

df1 = pd.read_excel('file1.xlsx')
df2 = pd.read_excel('file2.xlsx')

  router_name firewall_name
0     router1     firewall1
1     router2     firewall2
2     router3     firewall3
3     router4     firewall4

  device_name hardware_platform
0     router2          cisco111
1     router3          cisco222
2   firewall1          cisco333
3   firewall2          cisco444

第 2 步:首先合并(路由器)

df2 = df2.rename(columns={"device_name": "router_name"})
m1 = pd.merge(df1, df2, on='router_name', how='left')
m1 = m1.rename(columns={"hardware_platform": "router_hardware"})

  router_name firewall_name router_hardware
0     router1     firewall1             NaN
1     router2     firewall2        cisco111
2     router3     firewall3        cisco222
3     router4     firewall4             NaN

第 3 步:第二次合并(防火墙)

df2 = df2.rename(columns={"router_name": "firewall_name"})
m2 = pd.merge(m1, df2, on='firewall_name', how='left')

  router_name firewall_name router_hardware firewall_hardware
0     router1     firewall1             NaN          cisco333
1     router2     firewall2        cisco111          cisco444
2     router3     firewall3        cisco222               NaN
3     router4     firewall4             NaN               NaN

关于python - 使用 Pandas 合并数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60101244/

相关文章:

python - 使用 Flask 从 POST 获取值列表

python - 如何不检查多个数据框 Pandas ?

python - 仅使用 panda 替换数据框中的值(不使用 numpy)

python - Pandas Dataframe 在由索引分隔的部分中插值

r - 如何通过重组 MALLET 输出文件来创建表格?

python - pickle 图像对象?

python - 离线plot.ly无法在jupyter笔记本上工作

python - 小部件从 QTreeview 中消失

pandas - OCaml 中是否有等效的数据框?

python - Pandas DataFrame-查找列的索引值