7
如何在兩個數據框中挑出與同名列的區別? 我的意思是我有一個數據框A的列名爲X和數據框B的列名爲X,如果我做pd.merge(A, B, on=['X'])
,我會得到A和B的共同的X值,但我怎麼能得到「非常見」的?熊貓(Python)中的「反合併」
如何在兩個數據框中挑出與同名列的區別? 我的意思是我有一個數據框A的列名爲X和數據框B的列名爲X,如果我做pd.merge(A, B, on=['X'])
,我會得到A和B的共同的X值,但我怎麼能得到「非常見」的?熊貓(Python)中的「反合併」
如果更改合併類型爲how='outer'
和indicator=True
這將增加一列告訴你值是否是左/都/右只:
In [2]:
A = pd.DataFrame({'x':np.arange(5)})
B = pd.DataFrame({'x':np.arange(3,8)})
print(A)
print(B)
x
0 0
1 1
2 2
3 3
4 4
x
0 3
1 4
2 5
3 6
4 7
In [3]:
pd.merge(A,B, how='outer', indicator=True)
Out[3]:
x _merge
0 0.0 left_only
1 1.0 left_only
2 2.0 left_only
3 3.0 both
4 4.0 both
5 5.0 right_only
6 6.0 right_only
7 7.0 right_only
然後,您可以篩選產生的合併對DF _merge
西:
In [4]:
merged = pd.merge(A,B, how='outer', indicator=True)
merged[merged['_merge'] == 'left_only']
Out[4]:
x _merge
0 0.0 left_only
1 1.0 left_only
2 2.0 left_only
您還可以使用isin
和否定面具B中找到值不:
In [5]:
A[~A['x'].isin(B['x'])]
Out[5]:
x
0 0
1 1
2 2
你可以用'〜A ['X']。isin(B ['X'])'來查看A唯一的值,並且做相反的操作 – EdChum
另外我認爲'pd.merge (A,B,on = ['X'],indicator = True,how ='outer')'將會起作用,因爲這會增加_merge col,並且這將具有值'left_only','right_only'以指示值只有左/右 – EdChum