Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于一个数据帧中的一列和第二个数据帧中的两列合并两个数据帧_Python_Pandas_Dataframe - Fatal编程技术网

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

Python 如何基于一个数据帧中的一列和第二个数据帧中的两列合并两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: 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'], 'D

我有两个数据帧:

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:

df2:

我希望根据以下条件合并这两个数据帧:结果数据帧由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):

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

然后采取联合行动:

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

但是结果不是我想要的。

对于两列的数据处理测试成员资格,请使用filter by,然后:

您的解决方案应使用带有
重命名
列和
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

一切正常。
half1 = pd.merge(df1, df2,  how='left', left_on=['A'], right_on = ['AA'])
half2 = pd.merge(df1, df2,  how='left', left_on=['A'], right_on = ['BB'])
union = half1.merge(half2, how='outer')
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
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