pandas 인덱스 설정

10203 단어
다음 데이터를 테스트로 삼아 5월 6편의 영화 흥행
 2010-05-09,     ,51315.0
 2010-05-09,    ,5659.0
 2010-05-16,   ,1599.0
 2010-05-23,  ,2224.0
 2010-05-23,  ,
 2010-05-23,   ,1605.0
 2010-05-09,     ,51876.0
 2010-05-16,X  -  ,102063.0
 2010-05-16,X  -  ,102364.0
 2010-05-16,X  -  ,102163.0
 2010-05-09,    ,5659.0
 2010-05-16,   ,
 2010-05-23,  ,2246.0
 2010-05-16,    ,
 2010-05-16,    ,
 2010-05-09,    ,5681.0
 2010-05-16,X  -  ,102063.0
 2010-05-09,    ,5653.0
 2010-05-16,X  -  ,
 2010-05-16,   ,1595.0
 2010-05-16,    ,106652.0
 2010-05-09,     ,51621.0
 2010-05-09,     ,51927.0
 2010-05-09,    ,5620.0
 2010-05-16,X  -  ,101159.0
 2010-05-16,    ,
 2010-05-09,     ,51876.0
 2010-05-09,    ,5636.0
 2010-05-16,    ,
 2010-05-09,     ,51876.0
 2010-05-16,    ,106652.0
 2010-05-09,     ,51570.0
 2010-05-16,    ,106024.0
 2010-05-16,   ,
 2010-05-16,X  -  ,100758.0
 2010-05-23,    ,106024.0
 2010-05-09,    ,5586.0
 2010-05-23,  ,
 2010-05-09,    ,5620.0
 2010-05-09,     ,51162.0
 2010-05-23,   ,1595.0
 2010-05-09,     ,51621.0
 2010-05-23,  ,2253.0
 2010-05-23,X  -  ,101260.0
 2010-05-16,    ,105397.0
 2010-05-16,X  -  ,101761.0
 2010-05-16,   ,1596.0
 2010-05-09,     ,
 2010-05-23,  ,2250.0
 2010-05-16,X  -  ,101260.0
 2010-05-09,    ,
 2010-05-23,  ,2246.0
 2010-05-16,X  -  ,101761.0
 2010-05-09,    ,
 2010-05-16,    ,105397.0
 2010-05-16,   ,
 2010-05-16,    ,106547.0
 2010-05-09,     ,51672.0
 2010-05-16,   ,1592.0
 2010-05-16,X  -  ,102063.0
 2010-05-16,   ,1611.0
 2010-05-23,  ,2213.0
 2010-05-16,   ,1604.0
 2010-05-16,   ,1599.0
 2010-05-09,     ,
 2010-05-23,  ,
 2010-05-16,    ,
 2010-05-09,     ,51417.0
 2010-05-23,  ,
 2010-05-16,   ,1607.0
 2010-05-09,    ,5681.0
 2010-05-23,  ,2237.0
 2010-05-09,     ,51927.0
 2010-05-16,    ,105188.0
 2010-05-16,X  -  ,102263.0
 2010-05-16,   ,
 2010-05-09,    ,5625.0
 2010-05-16,    ,106652.0
 2010-05-16,X  -  ,
 2010-05-09,    ,5636.0
 2010-05-16,X  -  ,
 2010-05-16,    ,104979.0
 2010-05-09,    ,
 2010-05-16,   ,
 2010-05-09,     ,51519.0
 2010-05-16,   ,1588.0
 2010-05-16,    ,106233.0
 2010-05-16,   ,1590.0
 2010-05-16,X  -  ,100959.0
 2010-05-09,    ,5664.0
 2010-05-09,     ,
 2010-05-16,   ,1606.0
 2010-05-23,   ,1595.0
 2010-05-23,X  -  ,100959.0

빈 줄을 읽고 다시 가다
f1 = 'fbr_d_n_b.csv'
df20105 = pd.read_csv(f1, names=['date','film','price'])
df20105.drop_duplicates(inplace=True)
df20105.dropna(inplace=True)
print df20105.__len__()

단일 색인
기본 인덱스는 단층 인덱스입니다. 다음은 단층 인덱스를 조작합니다
1 . 찾기/선택
      
df20105.index.values

2 . 새 인덱스 바꾸기/설정하기 3개의 함수 기억하기resetindex, 인덱스를 0,1,2,3,4로 set 증가시키기 시작합니다index, 데이터 프레임 중 하나를 인덱스로 하고 reindex는 새 인덱스를 설정합니다. 존재하지 않는 index에 대응하는 데이터는 Nan입니다.
           ,          ,       :
df20105.reset_index(drop=True,inplace=True)  #      

  date      ,        :
df20105.set_index('date')

   set_index            index, 
    reindex        index,          5     Nan,
                       ,    nan
df20105.reindex(map(lambda x: x, range(5, df20105.__len__()+5)))

3 . 정렬
     
df20105.sort_index(ascending=False)

기타
       
df20105.index.name = 'index_name'

다중 색인
먼저 질문: 데이터를 읽고 데이터 프레임을 5~9일, 5~16일, 5-23편의 6편의 영화가 각자의 평균 흥행을 기록했다. 만약에 어떤 영화가 당일 흥행이 없으면 0으로 표시한다(주의: 2010-05-09 당산 대지진도 여러 개의 다른 데이터를 가지고 평균치를 취하면 된다)
우리는 데이터 프레임을 다음과 같은 형식으로 처리하기만 하면 된다.
2010-05-09  X  -           0.000000
                           0.000000
                       51564.333333
                        5640.500000
                           0.000000
                           0.000000
2010-05-16  X  -      101638.888889
                           0.000000
                           0.000000
                           0.000000
                        1598.800000
                      105860.000000
2010-05-23  X  -      101109.500000
                        2237.166667
                           0.000000
                           0.000000
                        1600.000000
                      106024.000000

위에서 준 데이터로 빈 것을 다시 제거한 후 인쇄하기 전 5줄은 다음과 같다
          date   film    price
0   2010-05-09         51315.0
1   2010-05-09          5659.0
2   2010-05-16          1599.0
3   2010-05-23          2224.0
4   2010-05-23          1605.0

날짜와 이름으로 그룹을 나누기
df20105 = df20105.groupby(['date','film'])['price'].mean()

date         film  
 2010-05-09             51564.333333
                         5640.500000
 2010-05-16  X  -      101638.888889
                         1598.800000
                       105860.000000
 2010-05-23  X  -      101109.500000
                         2237.166667
                         1600.000000
                       106024.000000

두 열에 따라 그룹을 나누면 데이터 프레임이 두 개의 인덱스로 변합니다. type을 출력해 보십시오
print type(df20105.index)

<class 'pandas.indexes.multi.MultiIndex'>

얻은 것은 멀티 인덱스다. 제목에 따라 4번에 빠진 영화 4편, 16번에 빠진 영화 3편, 23번에 빠진 영화 2편을 추가해 흥행 0으로 설정하면 된다.새 MultiIndex 다중 색인을 만들고 기존 색인을 대체한 다음 빈 값 부분을 0으로 채울 수 있습니다.
MultiIndex 생성에 필요한 매개 변수, 날짜 3개, 영화 6편 가져오기
index_data = df20105.index.levels #        

index_데이터는 다음과 같습니다.
[[u' 2010-05-09', u' 2010-05-16', u' 2010-05-23'], [u'X  -  ', u'  ', u'     ', u'    ', u'   ', u'    ']]

구성 데이터:
dates = index_data[0].values
films = index_data[1].values
arrays = [[], []]
for d in dates:
    for f in films:
        arrays[0].append(d)
        arrays[1].append(f)

MultiIndex 만들기:
index = pd.MultiIndex.from_arrays(arrays)  #arrays          

새 index로 대체하고 빈 값을 0으로 채우기
df20105 = df20105.reindex(index,fill_value=0)

최종 인쇄 결과 일치
 2010-05-09  X  -           0.000000
                            0.000000
                        51564.333333
                         5640.500000
                            0.000000
                            0.000000
 2010-05-16  X  -      101638.888889
                            0.000000
                            0.000000
                            0.000000
                         1598.800000
                       105860.000000
 2010-05-23  X  -      101109.500000
                         2237.166667
                            0.000000
                            0.000000
                         1600.000000
                       106024.000000

좋은 웹페이지 즐겨찾기