连接两个数据帧并保留pandas中的所有列

2024-04-23 08:08:16 发布

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

我尝试在python中使用pandas实现类似join的sql语句。在

我有这两个数据帧

df1:

id  name
7   MPS
10  MCM
11  MIB
12  NEW-MCM-DEV
15  SAMS
16  NEW-MCM-VIT

df2:

^{pr2}$

我想根据id(df1)和main_id(df2)连接这两个数据帧。在

我想要的输出是

main_id numberOfNodes tier_id   tier_name               name
7       2             29        MPS-Online              MPS
7       0             247       Offline-b24-settle      MPS
7       0             246       Offline-bank-data-feed  MPS 
7       1             256       Offline-Citynet-Recon   MPS
7       1             433       WAS                     MPS
10      8             26        APP                     MCM
10      2             296       BATCH                   MCM
10      2             358       BBO                     MCM

我试着用

df2.merge(df1, left_on='main_id', right_on='id')

试着用

df2.join(df1, on=['main_id'], how='outer')

但是这些都不起作用,因为df1上的name字段没有显示在输出上。我有什么办法可以做到这一点吗?在


Tags: 数据nameidpandasnewsqlmainon
1条回答
网友
1楼 · 发布于 2024-04-23 08:08:16

您可以使用pandas函数concat。在

Concatenate pandas objects along a particular axis with optional set logic along the other axes.

有一些方法可以使用它,首先按照问题的提问方式使用:

pd.concat([df1, df4], axis=1, sort=False)

在这种情况下,pandas将用NaN填充缺失的值。示例:

enter image description here

如果您喜欢忽略缺少值的行,可以使用:

^{pr2}$

在这种情况下,数据帧之间的联接将作为SQL上的内部联接工作。示例:

enter image description here

如果您想保留一些数据帧结构,只需使用新列来完成此结构,可以使用:

pd.concat([df1, df4], axis=1, join_axes=[df1.index])

在本例中,生成的dataframe将具有相同的df1行,但是有一些额外的列df4。示例:

enter image description here

更多信息可在this link上找到。在

相关问题 更多 >