İki adede aynı addaki sütunlar arasındaki farkı nasıl seçebilirim? Yani, X adında bir sütun ve X adında bir sütun içeren veri çerçevesi A, pd.merge(A, B, on=['X'])
yaparsam, A ve B'nin ortak X değerlerini alacağım, ancak "ortak olmayan" olanları nasıl alabilirim? ? Eğer how='outer'
ve indicator=True
için birleştirme türünü değiştirirseniz"Anti-birleştirme" pandalarda (Python)
7
A
cevap
14
bu ikisi/sağ yalnızca/değerler sola olup olmadığını söylemek için bir sütun katacak:
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
Daha sonra ortaya çıkan üzerinde df birleşti filtre edebilirsiniz _merge
col:
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
Ayrıca B değerleri değil bulmak için maske
isin
kullanabilir ve ortadan kaldıran
:
In [5]:
A[~A['x'].isin(B['x'])]
Out[5]:
x
0 0
1 1
2 2
Sadece A ['X']. Isin (B ['X']) 'A'ya özgü değerleri görmek ve tersini yapmak için tersine çevirebilirsiniz – EdChum
Ayrıca bd.merge (A, B, on = ['X'], indikatör = Doğru, nasıl = 'dış') 'bu '_merge' col ekler ve bu değerlerin" left_only "," right_only "değerlerine sahip olup olmadığını belirtecek şekilde çalışacaktır. sadece sol/sağ – EdChum