pandas的分层索引MultiIndex

import pandas as pd

stocks = pd.read_excel('./pandas/ant-learn-pandas/datas/stocks/互联网公司股票.xlsx')

print(stocks.head())
'''
          日期    公司      收盘      开盘       高       低    交易量   涨跌幅
0  2019-10-03  BIDU  104.32  102.35  104.73  101.15   2.24  0.02
1  2019-10-02  BIDU  102.62  100.85  103.24   99.50   2.69  0.01
2  2019-10-01  BIDU  102.00  102.80  103.26  101.00   1.78 -0.01
3  2019-10-03  BABA  169.48  166.65  170.18  165.00  10.39  0.02
4  2019-10-02  BABA  165.77  162.82  166.88  161.90  11.60  0.00
'''

# 查看每个公司的收盘平均价
res = stocks.groupby('公司')["收盘"].mean()
print(res)
'''
公司
BABA    166.80
BIDU    102.98
IQ       15.90
JD       28.35
'''

# Series的分层索引MultiIndex
ser = stocks.groupby(['公司', '日期'])['收盘'].mean()

# unstack把二级索引变成列
res2 = ser.unstack()
print(res2)
'''
日期    2019-10-01  2019-10-02  2019-10-03
公司                                      
BABA      165.15      165.77      169.48
BIDU      102.00      102.62      104.32
IQ         15.92       15.72       16.06
JD         28.19       28.06       28.80
'''

ser.reset_index()

# Series有多层索引MultiIndex怎样筛选数据?
res3 = ser.loc['BIDU']
print(res3)
'''
日期
2019-10-01    102.00
2019-10-02    102.62
2019-10-03    104.32
'''

# 多层索引,可以用元组的形式筛选
res4 = ser.loc[('BIDU', '2019-10-02')]
print(res4)
'''
102.62
'''
# 每一个公司,2019-10-02的收盘价格
res5 = ser.loc[:, '2019-10-02']
print(res5)
'''
公司
BABA    165.77
BIDU    102.62
IQ       15.72
JD       28.06
'''

# DataFrame的多层索引MultiIndex
stocks.set_index(['公司', '日期'], inplace=True)

# 排序
stocks.sort_index(inplace=True)

'''
DataFrame有多层索引MultiIndex怎样筛选数据?
【重要知识】在选择数据时:

元组(key1,key2)代表筛选多层索引,其中key1是索引第一级,key2是第二级,比如key1=JD, key2=2019-10-02
列表[key1,key2]代表同一层的多个KEY,其中key1和key2是并列的同级索引,比如key1=JD, key2=BIDU
'''

# 查看百度的股价情况
ret = stocks.loc['BIDU']

# 查看百度2019-10-02的股价情况
ret2 = stocks.loc[('BIDU', '2019-10-02'), :]
print(ret2)
'''
收盘     102.62
开盘     100.85
高      103.24
低       99.50
交易量      2.69
涨跌幅      0.01
'''
# 查看百度2019-10-02的开盘价
ret3 = stocks.loc[('BIDU', '2019-10-02'), '开盘']

# 查看百度和京东的股价详情
ret4 = stocks.loc[['BIDU', 'JD'], :]
print(ret4)
'''
                     收盘      开盘       高       低    交易量   涨跌幅
公司   日期                                                     
BIDU 2019-10-01  102.00  102.80  103.26  101.00   1.78 -0.01
     2019-10-02  102.62  100.85  103.24   99.50   2.69  0.01
     2019-10-03  104.32  102.35  104.73  101.15   2.24  0.02
JD   2019-10-01   28.19   28.22   28.57   27.97  10.64  0.00
     2019-10-02   28.06   28.00   28.22   27.53   9.53  0.00
     2019-10-03   28.80   28.11   28.97   27.82   8.77  0.03
'''

# 查看百度和京东2019-10-03的股价详情
ret5 = stocks.loc[(['BIDU', 'JD'], '2019-10-03'), :]
print(ret5)
'''
公司   日期                                                    
BIDU 2019-10-03  104.32  102.35  104.73  101.15  2.24  0.02
JD   2019-10-03   28.80   28.11   28.97   27.82  8.77  0.03
'''

# 查看百度和京东2019-10-03的收盘价
ret6 = stocks.loc[(['BIDU', 'JD'], '2019-10-03'), '收盘']

# slice(None)代表筛选这一索引的所有内容
# 查看所有公司2019-10-02和2019-10-03的股价详情
ret7 = stocks.loc[(slice(None), ['2019-10-02', '2019-10-03']), :]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值