我正在尝试将两个数据集与两个键列合并,并重复出现键,但是,我无法获得我想要的结果。简化我在这里有一个例子:
Dataframe A
a b x
0 0 0 100
1 0 1 101
2 0 2 102
3 1 1 103
Dataframe B
a b y
0 0 0 C
1 0 1 A
2 0 1 B
3 1 1 C
4 1 1 D
我正在对'a'和'b'列进行左连接合并操作:
C=A.merge(B,how='left',on=['a','b'])
输出是
Dataframe C
a b x y
0 0 0 100 NaN
1 0 1 101 NaN
2 0 2 102 NaN
3 1 1 103 NaN
我真正想要的是:
Dataframe C
a b x y
0 0 0 100 C
1 0 1 101 A
2 0 1 101 B
3 0 2 102 NaN
4 1 1 103 C
5 1 1 103 D
我尝试了4种不同的“how =”参数选项,没有给我那个结果。
请注意,在Dataiku上,只使用左连接,我得到了这个结果。 我搜索了一个没有成功的解决方案。我希望你能帮助我找到它。提前谢谢。
乔
编辑1:“外部”选项:
C=pd.merge(A,B,how='outer',on=['a','b'])
C
Out[241]:
a b x y
0 0.0 0.0 100.0 NaN
1 0.0 1.0 101.0 NaN
2 0.0 2.0 102.0 NaN
3 1.0 1.0 103.0 NaN
4 0.0 0.0 NaN C
5 0.0 1.0 NaN A
6 0.0 1.0 NaN B
7 1.0 1.0 NaN C
8 1.0 1.0 NaN D
编辑2:添加有关数据框的详细信息
A.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
a 4 non-null int32
b 4 non-null int32
x 4 non-null int32
dtypes: int32(3)
memory usage: 128.0 bytes
B.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
a 5 non-null object
b 5 non-null object
y 5 non-null object
dtypes: object(3)
memory usage: 200.0+ bytes
答案 0 :(得分:2)
使用outer
加入
In [1266]: df1.merge(df2, how='outer', on=['a','b'])
Out[1266]:
a b x y
0 0 0 100 C
1 0 1 101 A
2 0 1 101 B
3 0 2 102 NaN
4 1 1 103 C
5 1 1 103 D
详细
In [1267]: df1
Out[1267]:
a b x
0 0 0 100
1 0 1 101
2 0 2 102
3 1 1 103
In [1268]: df2
Out[1268]:
a b y
0 0 0 C
1 0 1 A
2 0 1 B
3 1 1 C
4 1 1 D