如何在不复制列的情况下合并Pandas数据帧

2024-04-26 13:10:14 发布

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

我有以下表格的数据:

frame1 = pd.DataFrame({'supplier1_match0': ['x'], 'id': [1]})
frame2 = pd.DataFrame({'supplier1_match0': ['2x'], 'id': [2]})

希望将多个帧左连接到这样的帧:

^{pr2}$

我在id上合并得到:

merged = base_frame.merge(frame1, how='left', left_on='id', right_on='id')
merged = merged.merge(frame2, how='left', left_on='id', right_on='id')

   id supplier1_match0_x supplier1_match0_y
0   1                  x                NaN
1   2                NaN                 2x
2   3                NaN                NaN

列被复制,并附加一个“y”。我需要的是:

id, supplier1_match0, ...
1,  x
2,  2x
3, NaN

有没有一个简单的方法来实现这一点?有一个类似的问题(Nested dictionary to multiindex dataframe where dictionary keys are column labels),但数据的形状不同。请注意,我有多个供应商,他们有不同数量的匹配,所以我不能假设数据将是一个“矩形”形状。提前谢谢。在


Tags: 数据rightiddataframeonmergemergednan
1条回答
网友
1楼 · 发布于 2024-04-26 13:10:14

你的问题是你不是真的想把所有的东西都merge。您需要concat您的第一组帧,然后合并。在

import pandas as pd
import numpy as np

base_frame.merge(pd.concat([frame1, frame2]), how='left')

#   id supplier1_match0
#0   1                x
#1   2               2x
#2   3              NaN

或者,您可以定义base_frame,以便它拥有其他帧的所有相关列,并将id设置为索引并使用.update。这可以确保base_frame保持相同的大小,而上面的则不是。不过,如果给定单元格有多个非空值,则数据将被重写。在

^{pr2}$

相关问题 更多 >