我有两个长度不等的数据帧。第一个数据帧(df1)具有唯一值的列A,并且对应于同一数据帧中的列B和列C. 第二个数据帧(df2)具有名为A列的列,其具有df1的列A的多个重复值并且对应于该列D和列E. 我想在列A上将df1连接到df2,这样它们就形成了一个数据帧,而列B和列C的值与df1中的值相对应。
Df1
column A. Column B
A. ab
B. bc
C. fg
Df2
Column A column D
A. 1
B. 2
C. 3
B. 4
A. 5
A. 6
Df1 + Df2
Column A column D column B
A. 1. ab
B. 2. bc
C. 3. fg
B. 4. bc
A. 5. ab
A. 6. ab
怎么做?
答案 0 :(得分:2)
如果只有两个DataFrame中的公共列与左连接加入列on
,则可以使用不带参数Column A
的{{3}}:
print (DF1)
Column A Column B Column C
0 A. ab 1
1 B. bc 9
2 C. fg 7
print (DF2)
Column A column D column E
0 A. 1 8
1 B. 2 9
2 C. 3 7
3 B. 4 3
4 A. 5 1
5 A. 6 0
df = DF2.merge(DF1,how='left')
print (df)
Column A column D column E Column B Column C
0 A. 1 8 ab 1
1 B. 2 9 bc 9
2 C. 3 7 fg 7
3 B. 4 3 bc 9
4 A. 5 1 ab 1
5 A. 6 0 ab 1
如果多个相同列添加on
:
df = DF2.merge(DF1,how='left', on='Column A')
print (df)
Column A column D column E Column B Column C
0 A. 1 8 ab 1
1 B. 2 9 bc 9
2 C. 3 7 fg 7
3 B. 4 3 bc 9
4 A. 5 1 ab 1
5 A. 6 0 ab 1
答案 1 :(得分:1)
假设'Column A'
是唯一的共同列,merge
默认使用所有常用列。
DF2.merge(DF1, 'left')
Column A column D column E Column B Column C
0 A. 1 8 ab 1
1 B. 2 9 bc 9
2 C. 3 7 fg 7
3 B. 4 3 bc 9
4 A. 5 1 ab 1
5 A. 6 0 ab 1
join
使用索引,因此我们将DF1
和join
的索引设置为DF2
。默认情况下,我们也需要设置DF2
的索引,但我们会指定on='Column A'
参数,以便我们可以在数据框中保留'Column A'
。
DF2.join(DF1.set_index('Column A'), on='Column A')
Column A column D column E Column B Column C
0 A. 1 8 ab 1
1 B. 2 9 bc 9
2 C. 3 7 fg 7
3 B. 4 3 bc 9
4 A. 5 1 ab 1
5 A. 6 0 ab 1