pandas中DataFrame多层次索引之loc和iloc

92 篇文章 9 订阅
62 篇文章 5 订阅

       loc[]表示基于label的位置索引,iloc[]表示基于数字的索引。这里需要注意的是对于多层次索引中两者的用法,对于iloc[],其用法很简单,iloc[i,j]就表示这个DataFrame的第i行第j列对应的元素,i表示最内侧的索引的位置,j也表示最内侧的索引的位置,所以其就是表示第i行j列的元素。

       对于多层次索引中的loc[],其用法比iloc[]复杂一些。loc[]优先表示行索引,如果其要同时体现列索引,则需要以loc[tuple,'a'],其中tuple表示行索引的多层次索引,以第一个元组标志,‘a’表示其对应的column,当然如果columns也是层次索引的话,也同样的可以用元组进行。除此情况之外,其他的情况都是针对行索引,比如loc['c']、loc['c','d']、loc[('c','d')]、loc[[('c','d')]],其都是对行进行索引,第一个表示选取行的最外层索引对应为'c'的内容,第二个表示再深入一层,如果只有两层,返回Series,第三个和第二个作用一样,第四个和前两个一样,但是返回的是DataFrame对象。

       下面是从官方文档的例子。

tuples = [
...    ('cobra', 'mark i'), ('cobra', 'mark ii'),
...    ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
...    ('viper', 'mark ii'), ('viper', 'mark iii')
... ]
>>> index = pd.MultiIndex.from_tuples(tuples)
>>> values = [[12, 2], [0, 4], [10, 20],
...         [1, 4], [7, 1], [16, 36]]
>>> df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)
>>> df
                     max_speed  shield
cobra      mark i           12       2
           mark ii           0       4
sidewinder mark i           10      20
           mark ii           1       4
viper      mark ii           7       1
           mark iii         16      36

df.loc['cobra']
         max_speed  shield
mark i          12       2
mark ii          0       4

df.loc[('cobra', 'mark ii')]
max_speed    0
shield       4
Name: (cobra, mark ii), dtype: int64

df.loc['cobra', 'mark i']
max_speed    12
shield        2
Name: (cobra, mark i), dtype: int64

df.loc[[('cobra', 'mark ii')]]
               max_speed  shield
cobra mark ii          0       4

df.loc[('cobra', 'mark i'), 'shield']
2

df.loc[('cobra', 'mark i'):'viper']
                     max_speed  shield
cobra      mark i           12       2
           mark ii           0       4
sidewinder mark i           10      20
           mark ii           1       4
viper      mark ii           7       1
           mark iii         16      36

df.loc[('cobra', 'mark i'):('viper', 'mark ii')]
                    max_speed  shield
cobra      mark i          12       2
           mark ii          0       4
sidewinder mark i          10      20
           mark ii          1       4
viper      mark ii          7       1

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值