加入两个不相等的数据帧

时间:2017-04-10 04:12:21

标签: python pandas

我有两个长度不等的数据帧。第一个数据帧(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

怎么做?

2 个答案:

答案 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使用索引,因此我们将DF1join的索引设置为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