如何基于一个数据框中的一列和第二个数据框中的两列合并两个数据框
Posted
技术标签:
【中文标题】如何基于一个数据框中的一列和第二个数据框中的两列合并两个数据框【英文标题】:How to merge two data frames based on one column in one data frame and two column in second dataframe 【发布时间】:2021-01-11 11:16:33 【问题描述】:我有两个数据框:
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')
但结果不是我想要的。
【问题讨论】:
【参考方案1】:通过Series.isin
过滤两列的数据工作测试成员资格boolean indexing
然后concat
:
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
【讨论】:
按预期工作。以上是关于如何基于一个数据框中的一列和第二个数据框中的两列合并两个数据框的主要内容,如果未能解决你的问题,请参考以下文章