Jak mogę odróżnić kolumny o tej samej nazwie w dwóch ramkach danych? Mam na myśli ramkę danych A z kolumną o nazwie X i ramkę danych B z kolumną o nazwie X, jeśli wykonam pd.merge(A, B, on=['X'])
, otrzymam wspólne wartości X z A i B, ale jak mogę uzyskać te "niespecjalne" ?"Anti-scalanie" w pandach (Python)
7
A
Odpowiedz
14
Jeśli zmienić typ seryjnej do how='outer'
i indicator=True
to doda kolumnę powiedzieć, czy wartości są w lewo/oba/prawo tylko:
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
Następnie można filtrować wypadkowa połączyła df na _merge
kol:
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
można również użyć isin
i negować maskę na znalezienie wartości nie w B:
In [5]:
A[~A['x'].isin(B['x'])]
Out[5]:
x
0 0
1 1
2 2
możesz po prostu zrobić '~ A ['X']. Isin (B ['X'])', aby zobaczyć wartości, które są unikalne dla A i odwrotnie, aby zrobić odwrotnie – EdChum
Również myślę, że 'pd.merge (A, B, on = ['X'], wskaźnik = True, how = 'zewnętrzny') 'będzie działało, ponieważ dodaje' _merge' col i będzie miało wartości 'left_only',' right_only', aby wskazać, czy wartości są tylko w lewo/prawo – EdChum