我想将两个具有不同且重叠列的数据框组合在一起:
df1
X a Y b c
A P 1 Q 21 1.135899
B P 2 Q 22 1.093204
C P 3 Q 23 2.035373
D P 4 Q 24 0.350060
E P 5 Q 25 -0.939962
df2
a b d
A 1 21 5.5
A 1 21 3.3
A 1 21 2.1
B 2 22 0.8
B 2 22 0.5
C 3 23 1.3
C 3 23 6.5
C 3 23 7.1
我想以这种方式组合两个数据框:
df3
a b c d
A 1 21 1.135899 5.5
A 1 21 1.135899 3.3
A 1 21 1.135899 2.1
B 2 22 1.093204 0.8
B 2 22 1.093204 0.5
C 3 23 2.035373 1.3
C 3 23 2.035373 6.5
C 3 23 2.035373 7.1
我怎样才能做到这一点?
尝试左合并。要维护索引,您需要在 marge 之前和之后使用 reset_index
set_index
。
res = df2.reset_index()
.merge(df1, how='left')
.set_index('index')
.loc[:, ['a', 'b', 'c', 'd']]
print(res)
# a b c d
# index
# A 1 21 1.135899 5.5
# A 1 21 1.135899 3.3
# A 1 21 1.135899 2.1
# B 2 22 1.093204 0.8
# B 2 22 1.093204 0.5
# C 3 23 2.035373 1.3
# C 3 23 2.035373 6.5
# C 3 23 2.035373 7.1
要附加df1
的所有列(如果df2
不存在(,请按difference
过滤,默认情况下join
左连接:
df = df2.join(df1[df1.columns.difference(df2.columns)])
print (df)
a b d X Y c
A 1 21 5.5 P Q 1.135899
A 1 21 3.3 P Q 1.135899
A 1 21 2.1 P Q 1.135899
B 2 22 0.8 P Q 1.093204
B 2 22 0.5 P Q 1.093204
C 3 23 1.3 P Q 2.035373
C 3 23 6.5 P Q 2.035373
C 3 23 7.1 P Q 2.035373
如果只需要一些列,则按list
添加子集:
df = df2.join(df1[df1.columns.difference(df2.columns)])[['a','b','c','d']]
print (df)
a b c d
A 1 21 1.135899 5.5
A 1 21 1.135899 3.3
A 1 21 1.135899 2.1
B 2 22 1.093204 0.8
B 2 22 1.093204 0.5
C 3 23 2.035373 1.3
C 3 23 2.035373 6.5
C 3 23 2.035373 7.1
细节:
print (df1[df1.columns.difference(df2.columns)])
X Y c
A P Q 1.135899
B P Q 1.093204
C P Q 2.035373
D P Q 0.350060
E P Q -0.939962