pandas之重塑和軸向旋轉

2021-09-27 04:18:09 字數 3321 閱讀 9508

對於dataframe,主要功能有:

(1)stack:將資料的列「旋轉」為行      (2)unstack:將資料的行「旋轉」為列

例1:(其中行列索引均為字串)

data = dataframe(np.arange(6).reshape((2,3)),index=pd.index(['o','c'],name='state'),columns=pd.index(['one','two','three'],name='number'))

data

out[3]:

number one two three

state

o 0 1 2

c 3 4 5

result=data.stack() #使用該資料的stack方法即可將列轉換為行,得到乙個series

result

out[5]:

state number

o one 0

two 1

three 2

c one 3

two 4

three 5

dtype: int32

result.unstack() #對於乙個層次化索引的series,你可以用unstack將其重排為乙個dataframe

out[6]:

number one two three

state

o 0 1 2

c 3 4 5

result.unstack(0) #預設情況下,操作的是最內層(stack也是如此)。傳入分層級的編號或名稱即可對其他級別進行unstack操作

out[7]:

state o c

number

one 0 3

two 1 4

three 2 5

result.unstack('state')

out[8]:

state o c

number

one 0 3

two 1 4

three 2 5

(3)如果不是所有的級別值都能在分組中找到的話,則unstack操作可能會引入缺失資料

s1 = series([0,1,2,3],index=['a','b','c','d'])

s2 = series([4,5,6],index=['c','d','e'])

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

data2.unstack()

out[9]:

a b c d e

one 0.0 1.0 2.0 3.0 nan

two nan nan 4.0 5.0 6.0

data2.unstack().stack() #stack缺省會濾除缺失資料,因此該運算是可逆的

out[10]:

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

data2.unstack().stack(dropna=false)

out[11]:

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

(4)在對dataframe進行unstack操作時,作為旋轉軸的級別將會成為結果中的最低級別:

df = dataframe(,columns=pd.index(['left','right'],name='side'))

df

out[13]:

side left right

state number

o one 0 5

two 1 6

three 2 7

c one 3 8

two 4 9

three 5 10

df = dataframe(,columns=pd.index(['left','right'],name='side'))

dfout[13]:

side left right

state number

o one 0 5

two 1 6

three 2 7

c one 3 8

two 4 9

three 5 10

df.unstack('state')

out[14]:

side left right

state o c o c

number

one 0 3 5 8

two 1 4 6 9

three 2 5 7 10

df.unstack('state').stack('side')

out[15]:

state c o

number side

one left 3 0

right 8 5

two left 4 1

right 9 6

three left 5 2

right 10 7

Pandas詳解之排序和排名

約定 import pandas as pd import numpy as np12 排序和排名 根據條件對series物件或dataframe物件的值排序 sorting 和排名 ranking 是一種重要的內建運算。接下來為大家介紹如何使用pandas物件的 sort index sort v...

pandas之ix loc 和 iloc的區別

在python中處理日常資料時,經常會需要索引某些行,現結合本人使用經驗做乙個小的總結,pandas中主要有以下函式 1 loc 2 iloc 3 ix 首先來談談loc 其是通過行標籤索引行資料 import pandas as pd df pd.dataframe columns team a ...

mysql 層次化 資料規整化之重塑和軸轉向

資料處理過程中,經常需要將二維資料轉換為一維,或者將一維轉換為二維報表的形式,在excel中需要借助資料透視表進行一維轉二維,在pandas中有許多重塑 reshape 或者軸向旋轉 pivot 運算。重塑層次化索引 層次索引化為dataframe資料的重排任務提供了一種具有良好一致性的方式 sta...