2016-06-09 2 views
0

두 가지 기준을 충족하는 두 데이터 프레임을 병합 할 때 높게 또는 낮게 검색했습니다. 본질적으로 내가하려고하는 것은 한 데이터 프레임에서 날짜와 시세 기호가 일치하는 주요 데이터 프레임으로의 전망이다.두 팬더 데이터 병합 두 가지 기준을 충족하는 데이터 프레임 (VLOOKUP EQUIVALENT)

df1이라는 기본 데이터 프레임의 기본 버전은 다음과 같습니다. 2011 년 5 월 1 일과 2016 년 5 월 2 일에 계정에있는 주식 기호입니다.

Account_Num Date   Symbol 
0  1   2016-05-01 AAPL 
1  1   2016-05-01 UA 
2  1   2016-05-01 DIS 
3  2   2016-05-01 CVX 
4  2   2016-05-01 GOOGL 
5  2   2016-05-01 PX 
6  3   2016-05-01 MOS 
7  3   2016-05-01 BLK 
8  3   2016-05-01 TMO 
9  1   2016-05-02 AAPL 
10 1   2016-05-02 UA 
11 1   2016-05-02 DIS 
12 2   2016-05-02 CVX 
13 2   2016-05-02 GOOGL 
14 2   2016-05-02 PX 
15 3   2016-05-02 MOS 
16 3   2016-05-02 BLK 
17 3   2016-05-02 TMO 

내 두 번째 데이터 프레임 DF2가, 2016년 5월 1일 및 2016년 5월 2일에 위의 계좌에있는 주식의 가격을 가지고 다음과 같습니다 (구성 가격) :

Date   Symbol Price 
0 2016-05-01 AAPL  99.02 
1 2016-05-02 AAPL  94.00 
2 2016-05-01 UA  43.00 
3 2016-05-02 UA  40.67 
4 2016-05-01 DIS  67.88 
5 2016-05-02 DIS  70.03 
6 2016-05-01 CVX  22.00 
7 2016-05-02 CVX  24.47 
8 2016-05-01 GOOGL 85.52 
9 2016-05-02 GOOGL 84.33 
10 2016-05-01 PX  44.22 
11 2016-05-02 PX  47.16 
12 2016-05-01 MOS  23.77 
13 2016-05-02 MOS  21.56 
14 2016-05-01 BLK  38.48 
15 2016-05-02 BLK  41.22 
16 2016-05-01 TMO  67.43 
17 2016-05-02 TMO  65.11 

다음과 같이 내가 함께 결국 원하는 것은 DF3입니다 :

Account_Num Date   Symbol Price 
0  1   2016-05-01 AAPL  99.02 
1  1   2016-05-01 UA  43.00 
2  1   2016-05-01 DIS  67.88 
3  2   2016-05-01 CVX  22.00 
4  2   2016-05-01 GOOGL  85.52 
5  2   2016-05-01 PX  44.22 
6  3   2016-05-01 MOS  23.77 
7  3   2016-05-01 BLK  38.48 
8  3   2016-05-01 TMO  67.43 
9  1   2016-05-02 AAPL  94.00 
10  1   2016-05-02 UA  40.67 
11  1   2016-05-02 DIS  70.03 
12  2   2016-05-02 CVX  24.47 
13  2   2016-05-02 GOOGL  84.33 
14  2   2016-05-02 PX  47.16 
15  3   2016-05-02 MOS  21.56 
16  3   2016-05-02 BLK  41.22 
17  3   2016-05-02 TMO  65.11 

내가보고하고 문제가 DF2가 23,000을 가지고있는 반면 내 DF1 10 만 개 행이 두 데이터 프레임은 서로 다른 길이 있다는 것입니다. 따라서 인덱스를 사용하여 일대일로 일치하는 것처럼 보이지 않습니다. 위의 데이터 프레임 예제는 실제 데이터에서 다른 계정보다 더 많은 주식을 보유하고 있으므로 매우 기본입니다. 그래서 내가 생각할 필요가있는 것은 df1의 행을 반복하고 df2에서 날짜와 기호가 일치하는 가격을 가져와야한다는 것입니다.

팬더스의 vlookup에 해당하는 예제를 찾았지만 일치하는 날짜와 기호를 찾고 해당 날짜에 주식 가격을 계산할 때 하나의 기준에만 일치합니다. 사람이 거기에이 작업을 수행하는 방법에 대한 정보를 알고 또는 제안이있는 경우

이 크게 될

감사합니다, da4l 감사 것

내가 할 수 있었다 @Merlin에서 힌트에
+0

@ da41 - 힌트 : 두 개의 테이블을 "결합"해야합니다. 두 개의 테이블을 ---- 2016-05-01AAPL과 같이 조인 할 키를 만들어야합니다. 2016-05-01UA ... – Merlin

+0

고마워요 @ 메린 그에게 지금 갈 것입니다. – da4l

답변

1

음 덕분에 내가 함께 필요한 것은 다음

#cretaed a new column in both data-frames concatenating the Date and Symbol variables called 'DateSym' 

df1['DateSym'] = df1['Date'].map(str) + df1['Symbol'] 
df1 

df2['DateSym'] = df1['Date'].map(str) + df1['Symbol'] 
df1 

#then created df3 by merging the two data-frames using 'DateSym' as the index after rearranging so both data-frames had the new 'DateSym' column on the left 

df3 = df1.merge(df2, on='DateSym', how='left') 
df3 
0

것은 어쩌면 이것은 당신이 원하는 :

df3 = df1.merge(df2,on=['Symbol','Date']) 
>>> df1.merge(df2,on=['Symbol','Date']) 
Account_Num  Date Symbol Price 
0    1 2016-05-01 AAPL 99.02 
1    1 2016-05-01  UA 43.00 
2    1 2016-05-01 DIS 67.88 
3    2 2016-05-01 CVX 22.00 
4    2 2016-05-01 GOOGL 85.52 
5    2 2016-05-01  PX 44.22 
6    3 2016-05-01 MOS 23.77.... 
,536,913,632 10