pandas中的多級index操作
阿新 • • 發佈:2018-11-10
在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
'''