1. 程式人生 > >pandas中的多級index操作

pandas中的多級index操作

在pandas中可以為series和dataframe設定多個index,也就是說可以有多級index和column。這樣可以對pandas的操作更加靈活。

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

np.random.seed(666)
# series 中的 index
s1 = Series(np.random.randn(6), index=[['1', '1', '1', '2', '2', '2'], ['a', 'b', 'c', 'a', 'b', 'c'
]]) print(s1) ''' 1 a 0.824188 b 0.479966 c 1.173468 2 a 0.909048 b -0.571721 c -0.109497 dtype: float64 ''' print(s1['1']) # 可以 獲取 index 為 1 的 series ''' a 0.824188 b 0.479966 c 1.173468 dtype: float64 ''' print(s1['1']['a']) # 0.8241880833175302 print(s1[:, 'a']) ''' 同樣是一個 series 1 0.824188 2 0.909048 dtype: float64 '''
# 多級的Series, 可以轉化為一個 dataframe df1 = s1.unstack() # 二級series 可以轉化dataframe print(df1) ''' a b c 1 0.824188 0.479966 1.173468 2 0.909048 -0.571721 -0.109497 ''' df2 = DataFrame([s1['1'], s1['2']]) print(df2) ''' a b c 0 0.824188 0.479966 1.173468 1 0.909048 -0.571721 -0.109497 '''
# dataframe 轉化為 series s2 = df1.unstack() print(s2) ''' a 1 0.824188 2 0.909048 b 1 0.479966 2 -0.571721 c 1 1.173468 2 -0.109497 dtype: float64 ''' s2 = df1.T.unstack() print(s2) ''' 1 a 0.824188 b 0.479966 c 1.173468 2 a 0.909048 b -0.571721 c -0.109497 dtype: float64 ''' # 建立 一個 多級的 dataframe df = DataFrame(np.arange(16).reshape(4, 4), index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]], \ columns=[['beijing', 'beijing', 'shanghai', 'shanghai'], [8, 9, 8, 9]] ) print(df) ''' beijing shanghai 8 9 8 9 a 1 0 1 2 3 2 4 5 6 7 b 1 8 9 10 11 2 12 13 14 15 ''' # 訪問 多級 dataframe 的元素 print(df['beijing']) # 返回 也是一個 dataframe ''' 8 9 a 1 0 1 2 4 5 b 1 8 9 2 12 13 ''' print(df['beijing'][8]) # 訪問dataframe和訪問Series的方法一樣 ''' a 1 0 2 4 b 1 8 2 12 Name: 8, dtype: int64 '''