English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pandas 인덱스 재구성

인덱스 재구성 DataFrame의 행 레이블과 열 레이블을 변경합니다. 재인덱싱은 특정 축에 대한 일정한 레이블 그룹과 일치하는 데이터를 만드는 것입니다.

인덱스를 통해 여러 가지 작업을 수행할 수 있습니다. 예를 들어-

기존 데이터를 새 레이블 그룹에 맞게 정렬합니다.레이블이 존재하지 않는 레이블 위치에 결손 값(NA) 표시를 삽입합니다.

예제:

 import pandas as pd
 import numpy as np
 N=20
 df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['낮은','중간','높은'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
 )
 # DataFrame 인덱스 재구성
 df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
 print(df_reindexed)

실행 결과:

           A C     B
0  2016-01-01  낮은 NaN
2  2016-01-03  높은 NaN
5  2016-01-06  낮은 NaN

다시 인덱싱하여 다른 객체와 일치시키기

객체를 가져와 그 축에 대해 다시 인덱싱하여 다른 객체와 같은 레이블로 설정하려면 원할 수 있습니다. 다음 예제를 통해 동일한 내용을 이해해보겠습니다

예제

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
 df1 = df1.reindex_like(df2)
 print(df1)

실행 결과:

         col1         col2         col3
0    -2.467652    -1.211687    -0.391761
1    -0.287396     0.522350     0.562512
2    -0.255409    -0.483250     1.866258
3    -1.150467    -0.646493    -0.222462
4     0.152768    -2.056643     1.877233
5    -1.155997     1.528719    -1.343719
6    -1.015606    -1.245936    -0.295275

여기서, df1 DataFrame(df)2도 변경되고 다시 인덱싱됩니다. 열 이름이 일치해야하며 그렇지 않으면 전체 열 레이블에 NAN이 추가됩니다.

다시 인덱싱할 때 채움

reindex() 선택적 매개변수 메서드를 사용하면, 이는 다음과 같은 채움 메서드 중 하나입니다

pad/ffill − 값으로 전채웁니다

bfill/backfill − 값으로 뒤채웁니다

nearest − 가장 가까운 인덱스 값으로 채웁니다

예제

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # NAN을 채웁니다
 print df2.reindex_like(df1)
 # 현재 이전 값으로 NAN을 채웁니다
 print("전방填充을 포함한 데이터프레임:")
 print(df2.reindex_like(df1,method='ffill'))

실행 결과:

         col1        col2       col3
0    1.311620   -0.707176   0.599863
1   -0.423455   -0.700265   1.133371
2         NaN         NaN        NaN
3         NaN         NaN        NaN
4         NaN         NaN        NaN
5         NaN         NaN        NaN
전방填充을 포함한 데이터프레임:
         col1        col2        col3
0    1.311620   -0.707176    0.599863
1   -0.423455   -0.700265    1.133371
2   -0.423455   -0.700265    1.133371
3   -0.423455   -0.700265    1.133371
4   -0.423455   -0.700265    1.133371
5   -0.423455   -0.700265    1.133371

마지막 네 행이 채워집니다.

다시 인덱싱할 때 채움 제한

limit 매개변수는 다시 인덱싱할 때 채움에 추가적인 제어를 제공합니다. 연속적으로 맞는 최대 개수를 지정합니다. 다음 예제를 통해 동일한 내용을 이해해보겠습니다-

예제

 import pandas as pd
 import numpy as np
  
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # NAN을 채웁니다
 print df2.reindex_like(df1)
 # 현재 이전 값으로 NAN을 채웁니다 print("전방填充 제한은",1데이터 프레임:
 print(df2.reindex_like(df1,method='ffill',limit=1))

실행 결과:

         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2         NaN         NaN         NaN
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN
전진 채우기 제한은1데이터 프레임:
         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2   -0.055713   -0.021732   -0.174577
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

주의하세요, 이전의 여섯 번째 줄은 일곱 번째 줄을 채웠습니다. 그런 다음, 각 줄은 그대로 유지되었습니다.

이름 지정

rename() 메서드를 사용하여 인덱스를 재표시할 수 있습니다. 이는 딕셔너리나 시리즈나 임의의 함수에 기반합니다.  
이를 이해하기 위해 다음 예제를 고려해 보겠습니다-

  import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 print df1
 print ("행과 열을 다시 이름 지정한 후:")
 print(df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
 index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

실행 결과:

         col1        col2        col3
0    0.486791    0.105759    1.540122
1   -0.990237    1.007885   -0.217896
2   -0.483855   -1.645027   -1.194113
3   -0.122316    0.566277   -0.366028
4   -0.231524   -0.721172   -0.112007
5    0.438810    0.000225    0.435479
행과 열을 다시 이름 지정한 후:
                c1          c2        col3
apple     0.486791    0.105759    1.540122
banana   -0.990237    1.007885   -0.217896
durian   -0.483855   -1.645027   -1.194113
3        -0.122316    0.566277   -0.366028
4        -0.231524   -0.721172   -0.112007
5         0.438810    0.000225    0.435479