pandas unstack () 및 stack () 함수

15966 단어 필기
.unstack () 및.stack()
먼저 다중 레벨 DataFrame 생성
data = pd.DataFrame(np.arange(6).reshape((2, 3)),
                     index=pd.Index(['Ohio','Colorado'], name='state'),
                     columns=pd.Index(['one', 'two', 'three'],
                     name='number'))

out:
side             left  right
state    number             
Ohio     one        0      5
         two        1      6
         three      2      7
Colorado one        3      8
         two        4      9
         three      5     10


이러한 다중 인덱스에 대한 DataFrame의 경우 다중 인덱스를 스택이라고 합니다.그러나unstack () 및.stack ()는 전자는 줄 색인을 해제한 무더기, 후자는 열 색인을 해제한 무더기로 이해할 수 있다.일단 퇴적 해제의 구체적인 모습을 한번 보도록 하겠습니다.
Mul = pd.MultiIndex.from_product([['A','B'],['one','two','three']])
df = pd.Series(np.arange(6),
                 index=Mul)
print(df)
print('————')
print(df.unstack())

out:
A  one      0
   two      1
   three    2
B  one      3
   two      4
   three    5
dtype: int32
————
   one  three  two
A    0      2    1
B    3      5    4

다음은 책에 만들어진 DataFrame을 빌려서 Stack()와 unstack()가 어떻게 작동하는지 먼저 df의 모습을 보도록 하겠습니다.
print(df)
out:
side             left  right
state    number             
Ohio     one        0      5
         two        1      6
         three      2      7
Colorado one        3      8
         two        4      9
         three      5     10
df2 = df.unstack('state')   #  df state   
print(df2)
print('——————')
df3 = df2.stack('state')     #  df2 state   
print(df3)

out:
side   left          right         
state  Ohio Colorado  Ohio Colorado
number                             
one       0        3     5        8
two       1        4     6        9
three     2        5     7       10
——————
side             left  right
number state                
one    Ohio         0      5
       Colorado     3      8
two    Ohio         1      6
       Colorado     4      9
three  Ohio         2      7
       Colorado     5     10

매개 변수가 들어오지 않으면 기본적으로 가장 안쪽 색인을 해제합니다.동시에 해제된 줄/열 인덱스는 최저 줄/줄 인덱스가 됩니다
실행할 때 unstack () 는 부족한 데이터를 가져올 수 있고, stack () 는 부족한 데이터를 무시할 수 있습니다
In [127]: s1 = pd.Series([0, 1, 2, 3], index=['a', 'b', 'c', 'd'])

In [128]: s2 = pd.Series([4, 5, 6], index=['c', 'd', 'e'])

In [129]: data2 = pd.concat([s1, s2], keys=['one', 'two'])

In [130]: data2
Out[130]: 
one  a    0
     b    1
     c    2
     d    3
two  c    4
     d    5
     e    6
dtype: int64

In [131]: data2.unstack()
Out[131]: 
       a    b    c    d    e
one  0.0  1.0  2.0  3.0  NaN
two  NaN  NaN  4.0  5.0  6.0

dropna = false 매개 변수를 입력해도 빈 값은 필터링되지 않습니다.
In [132]: data2.unstack()
Out[132]: 
       a    b    c    d    e
one  0.0  1.0  2.0  3.0  NaN
two  NaN  NaN  4.0  5.0  6.0

In [133]: data2.unstack().stack()
Out[133]: 
one  a    0.0
     b    1.0
     c    2.0
     d    3.0
two  c    4.0
     d    5.0
     e    6.0
dtype: float64

In [134]: data2.unstack().stack(dropna=False)
Out[134]: 
one  a    0.0
     b    1.0
     c    2.0
     d    3.0
     e    NaN
two  a    NaN
     b    NaN
     c    4.0
     d    5.0
     e    6.0
dtype: float64

좋은 웹페이지 즐겨찾기