2016-11-04 6 views
1

재귀 적으로 조회하고 싶은 두 개의 열이있는 매우 큰 팬더 데이터 프레임이 있습니다.팬더 데이터 프레임의 연결된 조회

다음 dataframe의 입력을 감안할 때 :

NewID, OldID 
1, 0 
2, 1 
3, 2 
5, 4 
7, 6 
8, 7 
9, 5 

내가 시리즈를 생성하고 싶습니다 OriginalId :

이것은 하찮게 정렬 된 데이터를 반복하여 각 행에 대해 해결 될 수
NewID, OldId, OriginalId 
1, 0, 0 
2, 1, 0 
3, 2, 0 
5, 4, 4 
7, 6, 6 
8, 7, 6 
9, 5, 4 

OldId가 기존 NewId를 가리키는 지 검사하고, 그렇다면 OriginalId를 해당 행의 OriginalId로 설정합니다.

반복적으로 다음과 같은 알고리즘에 의해, 열을 병합하고 업데이트하여 해결할 수 있습니다 : 누적 합계 또는 유사한을 통해이 작업을 수행 할 수있는 팬더 친화적 인 방법이 있어야처럼

Merge OldId to NewId. 
For any one that did not match, set OriginalId to OldId. 
If they did match, set OldId to OldId for the matched column. 
Repeat until OriginalIds are all filled in. 

느낀다.

답변

0

쉬운 :

df.set_index('NewID', inplace=True) 
df.loc[:, 'OriginalId'] = df.loc[df['OldId'], 'OldID'].fillna(df['OldId']) 
+0

나는 더 NaN의 채울 존재하지 않을 때까지 반복적으로 실행하지 않는 한이 작품 생각하지 않습니다. 3, 2 행을 고려하십시오. NewId == OldID를 검색하여 OldID를 얻습니다. 그러나 연산을 반복하고 0을 원래 ID로 계산해야합니다. 이것은 위에서 설명한 알고리즘의 팬더 효율적인 구현처럼 보입니다. 내가 오해하고 있니? – user2411693

+0

당신은 당신이 그 (것)들을 다 쓸 때까지 "OldID"를 찾아 낼 필요가 있다는 것을 의미합니까? – Kartik

+0

예, OldId가 모든 NewId 집합에 속하지 않는 항목을 찾을 때까지 OldId를 계속 연결해야합니다. – user2411693

관련 문제