pandas中的多级index操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/missyougoon/article/details/83500793

在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
'''

猜你喜欢

转载自blog.csdn.net/missyougoon/article/details/83500793
今日推荐