죄송합니다.이 회신이 늦어지면 죄송합니다. 조건부 합병을 원한다고 생각하지 않습니다 (적어도 상황을 정확하게 이해한다면). 나는 당신이 원하는 결과를 header_mf와 ret_mf를 합쳐서 ['fundno','caldt']
에 넣은 다음 팬더에 shift
연산자를 사용하여 과거의 결과를 생성한다고 생각합니다.
그래서 나는 당신의 데이터는 기본적으로 다음과 같은 생각 :
import pandas as pd
header = pd.read_csv('header.csv')
print header
fundno caldt foo
0 1 1986-06-30 100
1 1 1986-07-31 110
2 1 1986-08-29 120
3 1 1986-09-30 115
4 1 1986-10-31 110
5 1 1986-11-28 125
6 1 1986-12-31 137
7 2 1986-06-30 130
8 2 1986-07-31 204
9 2 1986-08-29 192
10 2 1986-09-30 180
11 2 1986-10-31 200
12 2 1986-11-28 205
13 2 1986-12-31 205
ret_mf = pd.read_csv('ret_mf.csv')
print ret_mf
fundno caldt mret
0 1 1986-06-30 0.05
1 1 1986-07-31 0.01
2 1 1986-08-29 -0.01
3 1 1986-09-30 0.10
4 1 1986-10-31 0.04
5 1 1986-11-28 -0.02
6 1 1986-12-31 -0.06
7 2 1986-06-30 -0.04
8 2 1986-07-31 0.03
9 2 1986-08-29 0.07
10 2 1986-09-30 0.00
11 2 1986-10-31 -0.05
12 2 1986-11-28 0.09
13 2 1986-12-31 0.04
물론, 헤더 파일 (내 만들어 foo
변수 외에) 거기에 많은 변수가있을 수 있습니다. 이것은 기본적으로 다음 데이터의 특성을 캡처하지만, 난 그냥 shift
을 ['fundno','caldt']
에 병합 한 후 사용할 수 있습니다 생각 :
mf = header.merge(ret_mf,how='left',on=['fundno','caldt'])
print mf
fundno caldt foo mret
0 1 1986-06-30 100 0.05
1 1 1986-07-31 110 0.01
2 1 1986-08-29 120 -0.01
3 1 1986-09-30 115 0.10
4 1 1986-10-31 110 0.04
5 1 1986-11-28 125 -0.02
6 1 1986-12-31 137 -0.06
7 2 1986-06-30 130 -0.04
8 2 1986-07-31 204 0.03
9 2 1986-08-29 192 0.07
10 2 1986-09-30 180 0.00
11 2 1986-10-31 200 -0.05
12 2 1986-11-28 205 0.09
13 2 1986-12-31 205 0.04
은 이제 과거의 반환 변수를 만들 수 있습니다. 나는 그런 작은 예 패널을 생성하기 때문에, 나는 단지 과거 수익률 3 개월을 할 것입니다 : 나는 당신의 데이터를 오해
for lag in range(1,4):
good = mf['fundno'] == mf['fundno'].shift(lag)
mf['ret' + str(lag)] = mf['mret'].shift(lag).where(good)
print mf
fundno caldt foo mret ret1 ret2 ret3
0 1 1986-06-30 100 0.05 NaN NaN NaN
1 1 1986-07-31 110 0.01 0.05 NaN NaN
2 1 1986-08-29 120 -0.01 0.01 0.05 NaN
3 1 1986-09-30 115 0.10 -0.01 0.01 0.05
4 1 1986-10-31 110 0.04 0.10 -0.01 0.01
5 1 1986-11-28 125 -0.02 0.04 0.10 -0.01
6 1 1986-12-31 137 -0.06 -0.02 0.04 0.10
7 2 1986-06-30 130 -0.04 NaN NaN NaN
8 2 1986-07-31 204 0.03 -0.04 NaN NaN
9 2 1986-08-29 192 0.07 0.03 -0.04 NaN
10 2 1986-09-30 180 0.00 0.07 0.03 -0.04
11 2 1986-10-31 200 -0.05 0.00 0.07 0.03
12 2 1986-11-28 205 0.09 -0.05 0.00 0.07
13 2 1986-12-31 205 0.04 0.09 -0.05 0.00
나의 사과합니다.