我想将两个数据框合并为不同且重叠的列:
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
我怎样才能做到这一点?
答案 0 :(得分:2)
尝试左合并。要维护索引,您需要先使用reset_index
,然后在marge之后使用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
答案 1 :(得分:0)
要附加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