나는 판다 데이터 프레임 A와 B가 두 개 있습니다.두 팬더 데이터 프레임의 행을 비교하는 가장 빠른 방법은 무엇입니까?
A는 존재 또는 부존재를 나타내는 이진 값으로 채워져 있습니다.
B는 1024 행 × 10 열이며 0과 1의 전체 반복이므로 1024 행을가집니다.
A의 특정 10 열에서 B의 주어진 행과 일치하는 행을 찾으려고합니다. 전체 행이 요소가 아닌 요소와 일치해야합니다.
예를 들어, 나는
A[(A.ix[:,(1,2,3,4,5,6,7,8,9,10)==(1,0,1,0,1,0,0,1,0,0)).all(axis=1)]
그 특정 열 (1,2,3,4,5,6,7,8,9,10)
에서 B의 (1,0,1,0,1,0,0,1,0,0)
행과 일치 업에 그 행 (3,5,8,11,15)
뭔가를 반환 할 것입니다 그리고 모든을 통해이 작업을 수행 할 수 B.에서 행 내가이 일을 알아낼 수있는 가장 좋은 방법이었다 :
import numpy as np
for i in B:
B_array = np.array(i)
Matching_Rows = A[(A.ix[:,(1,2,3,4,5,6,7,8,9,10)] == B_array).all(axis=1)]
Matching_Rows_Index = Matching_Rows.index
이를 한 인스턴스에서는 끔찍한 것이 아니지만, 약 2 만 회 실행되는 while 루프에서 사용합니다. 그러므로, 꽤 느려집니다.
저는 DataFrame.apply를 사용하여 아무 소용이 없습니다. 더 잘 매핑 할 수 있을까요?
필자는 Python을 처음 접했을 때 누군가가 분명히 더 효율적인 것을 보길 바랬습니다.
감사합니다.
A의 단일 행에 B가 여러 개 일치 할 수도 있습니다. 따라서 A 행의 특정 행에 적어도 하나의 일치가 필요합니까? 또는 col1-col10 사이의 일치 항목을 게시 된 코드로 판단하는 경우에만 찾으십니까? – Divakar
일치하는 행으로 무엇을 할 예정입니까? 여러분은 B를 완전히 피하고 A 그룹의 관심사에 groupby를 사용할 수있는 것처럼 보입니다. –
일치하는 행을 기반으로 엔트로피 값을 계산할 것입니다. –