如何基于一个数据帧中的一列和第二个数据帧中的两列合并两个数据帧

2024-09-29 01:35:39 发布

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

我有两个数据帧:

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3','A4','A5']})

df2 = pd.DataFrame({'AA': ['A1', 'A3','A16','A1'],
                      'BB': ['A2', 'Z1','A12','X9'],
                      'CC': ['121', '345','444','432'],
                      'DD': ['D0', 'D1','783','980']})

df1:

    A
0   A1
1   A2
2   A3
3   A4
4   A5

df2:

    AA  BB  CC  DD
0   A1  A2  121 D0
1   A3  Z1  345 D1
2   A16 A12 444 783
3   A1  X9  432 980

我希望根据以下条件合并这两个数据帧:结果数据帧由DF2的行组成,这些行的AA列或BB列中的值与DF1中A列中的值匹配

例如:

    AA  BB  CC  DD
0   A1  A2  121 D0
1   A1  A2  121 D0
2   A1  X9  432 980
1   A3  Z1  345 D1

我尝试了以下方法,但我不确定这是否是正确的方法。 首先,我合并了A列(df1)和AA列(df2):

half1 = pd.merge(df1, df2,  how='left', left_on=['A'], right_on = ['AA'])

然后我合并了A列(df1)和BB列(df2):

half2 = pd.merge(df1, df2,  how='left', left_on=['A'], right_on = ['BB'])

然后采取联合行动:

union = half1.merge(half2, how='outer')

但结果不是我想要的


Tags: 数据a2ona1lefta3aacc
1条回答
网友
1楼 · 发布于 2024-09-29 01:35:39

对于通过^{}和通过^{}^{}筛选的两列的数据处理测试成员身份:

df3 = pd.concat([df2[df2['AA'].isin(df1['A'])],
                 df2[df2['BB'].isin(df1['A'])]]).sort_index()
print (df3)
   AA  BB   CC   DD
0  A1  A2  121   D0
0  A1  A2  121   D0
1  A3  Z1  345   D1
3  A1  X9  432  980

应使用带有rename列的内部联接以及pd.concat来更改您的解决方案:

half1 = pd.merge(df1.rename(columns={'A':'AA'}), df2, on='AA')
half2 = pd.merge(df1.rename(columns={'A':'BB'}), df2, on='BB')

df3 = pd.concat([half1,half2]).sort_index()
print (df3)
   AA  BB   CC   DD
0  A1  A2  121   D0
0  A1  A2  121   D0
1  A1  X9  432  980
2  A3  Z1  345   D1

相关问题 更多 >