2016-11-04 4 views
2

멀티 인덱스 데이터 프레임이 있는데, 가장 안쪽의 인덱스의 길이가 같지 않을 수 있습니다. 반복되는 값을 가진 다른 열을 추가 할 수 있지만 행 수가 같지 않으므로 실행할 수 없습니다.multiindex 데이터 프레임에 reptitive 시퀀스를 적용합니다.

df['marker'] = np.repeat([0,1,2], len(df), axis = 0) 
ValueError: Length of values does not match length of index 

가 여기 내 dataframe의 샘플입니다 :와, 그래서 당신이 볼 수

       close 
date ticker  expiry_dt 
2016-07-27 BHEL 2016-07-28 147 
        2016-08-25 147 
        2016-09-29 150 
2016-07-28 BHEL 2016-07-28 149 
        2016-08-25 147 
        2016-09-29 149 
2016-07-29 BHEL 2016-08-25 149 
        2016-09-29 149 

, 가장 안쪽의 인덱스 ('expirty_dt')는 불평등의 길이입니다. 나는 어쩌면 루프를 통해이를 달성 할 수

enter image description here

,하지만 난 큰 데이터베이스와 루프가 매일 이렇게 비효율적이 될 것 같습니다 내 원하는 출력이다. 미리 감사드립니다.

답변

1

당신은 예, np.tile 내가 원하는 것을 추측

df.groupby(['date', 'ticker']).cumcount() 
+0

멋지다! 고맙습니다. –

0

np.repeat 표현식은 3*len(df) 개의 정수로 배열을 생성합니다.

In [176]: np.repeat([0,1,2],3) 
Out[176]: array([0, 0, 0, 1, 1, 1, 2, 2, 2]) 
In [177]: _.shape 
Out[177]: (9,) 

다른 중계기

In [178]: np.tile([0,1,2],3) 
Out[178]: array([0, 1, 2, 0, 1, 2, 0, 1, 2]) 

있다 그러나 총 문구가 적합한 지 여부의 문제는 여전히있다.

+0

합니다. 그러나, 어떻게 행 수가 같지 않은 문제를 극복 할 수 있습니까? –

+0

고유 한 날짜의 수, 첫 번째 열이 아닌'close' 값의 수를 원합니다. 어쩌면'len (df)/3'이 효과가 있을지 모른다. (나는 판다가 아닌 열등한 사용자 다. 그래서 나는 여기에서 추측하고있다). – hpaulj

+0

외부 인덱스에서 groupby를 사용하여이 문제를 해결할 수 있다면 시퀀스를 적용하는 것이 좋습니다. 다음과 같음 : df [ 'marker'] = df.groupby (레벨 = 0, group_keys = False) .apply (lambda x : np.arange (0,3)) 이것은 여전히 ​​작동하지 않지만, 생각은 정확합니다! –