2014-12-09 3 views
0

_ItemId라는 인덱스와 _ChannelId 열을 가진 DataFrame과 _SomeValue로 아래에 단순화 된 다른 값 열이 있습니다. 각 _Channel 모달 리티에 대해 정확히 같은 _ItemId 요소를 갖도록 DataFrame을 변환하고 싶습니다 (패널 데이터에서와 같이 "밸런싱"이라고 함).다시 인덱싱을 사용하여 데이터 프레임 밸런싱

아래 예제에서 DataFrame의 균형을 맞추기 위해 원하는 값이있는 3 차원 행을 Nan 값과 함께 삽입했습니다.

나는 reindex() 함수를 사용할 것이라고 생각했지만 누락 된 요소를 삽입해야하는 인덱스를 만드는 방법에 대해서는 확신이 없습니다. 어떤 제안이라도 대단히 감사합니다.

내가 무엇을 가지고 :

 _ChannelId _SomeValue 
_ItemId     
6559085 MICRO AA 
6589413 MICRO AB 
6589421 MICRO AA 
6781144 MICRO AC 
8184089 MICRO AA 
6559085 WILSON AA 
6589413 WILSON AC 

내가 원하는 무엇 :

 _ChannelId _SomeValue 
_ItemId     
6559085 MICRO AA 
6589413 MICRO AB 
6589421 MICRO AA 
6781144 MICRO AC 
8184089 MICRO AA 
6559085 WILSON AA 
6589413 WILSON AC 
6589421 WILSON NaN 
6781144 WILSON NaN 
8184089 WILSON NaN 

감사

+0

인덱스 값에 특별한 의미가 있습니까? 아니면 고유 한 값입니까? – Mike

답변

1

먼저 예를 들어, 참조로 수행 할 그룹의 인덱스를 얻을 :

idx = df.groupby('_ChannelId').groups['MICRO'] 

5 월 당신이 유니온, 고유 인덱스, 첫 번째 그룹의 인덱스 등을 원한다면, 질문에 명확하게 지정되어 있지 않습니다. 그러면 다음을 수행 할 수 있습니다.

df.groupby('_ChannelId')\ 
    .apply(lambda x: x.reindex(idx))\ 
    .drop('_ChannelId', axis=1)\ 
    .reset_index('_ChannelId') 

     _ChannelId _SomeValue 
_ItemId  
6559085 MICRO  AA 
6589413 MICRO  AB 
6589421 MICRO  AA 
6781144 MICRO  AC 
8184089 MICRO  AA 
6559085 WILSON  AA 
6589413 WILSON  AC 
6589421 WILSON  NaN 
6781144 WILSON  NaN 
8184089 WILSON  NaN 
+0

감사합니다. 이것은 완벽합니다 (생각보다 복잡합니다). 나는 df.index.unique()로 얻을 수있는 모든 고유 한 _ItemId의 결합을 원합니다. – Charles

+0

도움이되어 기쁩니다! – elyase