2013-04-15 4 views
3

열에 식별자의 여러 구성 요소가 있고 다른 열에 식별자와 연결된 값이있는 DataFrame이 있습니다. 각 열이 식별 매개 변수가되도록 n 개의 열을 만들 수 있기를 원합니다.다른 열의 조합으로 새 열 생성

  foo Type  ID  Index Value 
25090  x  A  0  0  23272000 
25090  x  A  0  0  23272000 
25091  x  A  1  0  22896000 
25092  x  B  0  1  20048000 
25093  y  A  0  0  19760000 
25092  y  B  0  1  20823342 

는 I는 예컨대이 (I는 GROUPBY 의해 얻을 수있다) Type_ID_Index 그룹의 n 개의 열이며, 각 열은 각각의 값을 갖는 것을 확인하고 싶다. 값을 foo와 연관시키고 싶습니다.

즉 내가이를 어떻게

  foo   A_0_0  A_1_0  B_0_1  
25090  x   23272000 22896000 20048000 
25090  x   23272000 22896000 20048000 
25091  x   23272000 22896000 20048000 
25092  x   23272000 22896000 20048000 
25093  y   19760000 21568000 20823342 
25092  y   19760000 21568000 20823342 

?

답변

3

join 행 방향으로 적용하여 예제 데이터

In [3]: df 
Out[3]: 
     foo bar Type ID Index  Value 

25090 x 9 A 0  0 23272000 
25090 x 5 A 0  0 23272000 
25091 x 3 A 1  0 22896000 
25092 x 3 B 0  1 20048000 
25093 y 6 A 0  0 19760000 
25092 y 4 B 0  1 20823342 

연결하여 각 행의 식별자

시작.

In [4]: identifier = df[['Type', 'ID', 'Index']].apply(
      lambda x: '_'.join(map(str, x)), axis=1) 

값 열에서 시리즈를 만들고 identifer와 foo로 색인을 만듭니다.

'unstack'그것을 'foo'의 원본 DataFrame에 가입하십시오.

In [8]: df[['foo', 'bar']].join(v.drop_duplicates().unstack(), on='foo') 
Out[8]: 
     foo bar  A_0_0  A_1_0  B_0_1 

25090 x 9 23272000 22896000 20048000 
25090 x 5 23272000 22896000 20048000 
25091 x 3 23272000 22896000 20048000 
25092 x 3 23272000 22896000 20048000 
25093 y 6 19760000  NaN 20823342 
25092 y 4 19760000  NaN 20823342 

중복을 제거하기 전에 v에 중복을 삭제했음을 유의하십시오. 이것은 필수적입니다. 데이터 세트의 어느 곳에서나 같은 idenitifer에 대해 다른 값을 갖고 있다면 문제가 발생할 것입니다.

사소한 포인트 : 예제 출력에 예제 입력에서 누락 된 행 (25094)이 있습니다. 또한 출력 결과의 NaN은 의미가 있습니다. foo = 'y'일 때 A_1_0에 지정된 값이 없습니다.

+0

_ 데이터 세트의 동일한 idenitifer에 대해 다른 값을 사용하면 문제가 발생합니다 ._ 예. 내 측정 결과가 시끄 럽기 때문에 문제가 될 수 있습니다. 그 (것)들을 평균하는 우아한 방법은 무엇입니까? –

+1

나는 이것을 얻었다 고 생각한다. 다음은 내가 한 일입니다. v = v.groupby (v.index) .mean ( ) v.index = pd.MultiIndex.from_tuples (v.index) –

관련 문제