pandas層級索引和統計計算


層級索引(hierarchical indexing)

下面創建一個Series, 在輸入索引Index時,輸入了由兩個子list組成的list,第一個子list是外層索引,第二個list是內層索引。

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(12), index=[
    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
    [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])
print(ser_obj)

效果

a  0    0.148659
   1    0.392730
   2   -0.410365
b  0   -1.441815
   1   -1.085728
   2   -1.755635
c  0    0.548349
   1    0.186693
   2    0.355762
d  0   -0.055593
   1    0.180773
   2    0.532658
dtype: float64

MultiIndex索引對象

  • 打印這個Series的索引類型,顯示是MultiIndex

  • 直接將索引打印出來,可以看到有lavels,和labels兩個信息。lavels表示兩個層級中分別有那些標簽,labels是每個位置分別是什么標簽。

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(12), index=[
    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
    [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])
# print(ser_obj)
print(type(ser_obj.index))
print(ser_obj.index)

效果:

<class 'pandas.core.indexes.multi.MultiIndex'>
MultiIndex([('a', 0),
            ('a', 1),
            ('a', 2),
            ('b', 0),
            ('b', 1),
            ('b', 2),
            ('c', 0),
            ('c', 1),
            ('c', 2),
            ('d', 0),
            ('d', 1),
            ('d', 2)],
           )

選取子集

  • 根據索引獲取數據。因為現在有兩層索引,當通過外層索引獲取數據的時候,可以直接利用外層索引的標簽來獲取。

  • 當要通過內層索引獲取數據的時候,在list中傳入兩個元素,前者是表示要選取的外層索引,后者表示要選取的內層索引。

 

1. 外層選取:

ser_obj['outer_label']

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(12), index=[
    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
    [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])

# 外層選取
print(ser_obj['c'])

效果

0    0.072428
1    1.194215
2   -1.456029
dtype: float64

2. 內層選取:

ser_obj[:, 'inner_label']

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(12), index=[
    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
    [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])

# 內層選取
print(ser_obj[:, 2])

效果

a   -0.098249
b    1.807483
c   -0.294296
d    0.243345
dtype: float64

常用於分組操作、透視表的生成等

交換分層順序

1. swaplevel()

.swaplevel( )交換內層與外層索引。

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(12), index=[
    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
    [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])

print(ser_obj.swaplevel())

效果

0  a   -0.475376
1  a    0.012922
2  a    0.130198
0  b    0.119821
1  b   -0.315828
2  b    0.033378
0  c   -0.156276
1  c   -0.496511
2  c   -1.493716
0  d   -0.453016
1  d   -0.556026
2  d    0.380415
dtype: float64

交換並排序分層

swaplevel()

.sort_index( )先對外層索引進行排序,再對內層索引進行排序,默認是升序。

import pandas as pd
import numpy as np

ser_obj = pd.Series(np.random.randn(12), index=[
    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
    [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])
print(ser_obj)
# 交換並排序分層
print(ser_obj.swaplevel().sort_index())

效果:

a  0    1.118216
   1   -1.228231
   2   -1.236862
b  0   -0.049346
   1    0.596290
   2   -0.552489
c  0    1.338643
   1    0.277671
   2   -1.892496
d  0   -1.344015
   1    0.421452
   2    0.232528
dtype: float64
0  a    1.118216
   b   -0.049346
   c    1.338643
   d   -1.344015
1  a   -1.228231
   b    0.596290
   c    0.277671
   d    0.421452
2  a   -1.236862
   b   -0.552489
   c   -1.892496
   d    0.232528

Pandas統計計算和描述

常用的統計計算

  • sum, mean, max, min…

axis=0 按列統計,axis=1按行統計

skipna 排除缺失值, 默認為True

常用的統計描述

describe 產生多個統計數據

常用的統計描述方法:

 

demo:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])
print("df_obj")
print(df_obj)
print("df_obj.sum()")
print(df_obj.sum())
print("df_obj.max()")
print(df_obj.max())
print("df_obj.min()")
print(df_obj.min(axis=1, skipna=False))
print("df_obj.describe()")
print(df_obj.describe())

效果:

df_obj
          a         b         c         d
0  0.990848 -0.626976 -0.826166 -0.961985
1  1.314470  0.417564 -0.334301  0.434747
2  0.451489 -0.182809  0.531624 -1.564701
3 -1.304920 -0.377381 -2.644873  0.289440
4  1.379152 -0.150612 -0.608031  1.840602
df_obj.sum()
a    2.831040
b   -0.920214
c   -3.881746
d    0.038103
dtype: float64
df_obj.max()
a    1.379152
b    0.417564
c    0.531624
d    1.840602
dtype: float64
df_obj.min()
0   -0.961985
1   -0.334301
2   -1.564701
3   -2.644873
4   -0.608031
dtype: float64
df_obj.describe()
              a         b         c         d
count  5.000000  5.000000  5.000000  5.000000
mean   0.566208 -0.184043 -0.776349  0.007621
std    1.108532  0.386206  1.164946  1.326086
min   -1.304920 -0.626976 -2.644873 -1.564701
25%    0.451489 -0.377381 -0.826166 -0.961985
50%    0.990848 -0.182809 -0.608031  0.289440
75%    1.314470 -0.150612 -0.334301  0.434747
max    1.379152  0.417564  0.531624  1.840602

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM