python数据框索引行_从具有复合(层次)索引的Pandas数据框中选择行

在Python 0.19.0中,有一个新的建议方法,在这里解释1。我相信他们给出的最清楚的例子是下面的例子,其中他们从四级索引中分割出来。数据帧就是这样生成的:In [46]: def mklbl(prefix,n):

....: return ["%s%s" % (prefix,i) for i in range(n)]

....:

In [47]: miindex = pd.MultiIndex.from_product([mklbl('A',4),

....: mklbl('B',2),

....: mklbl('C',4),

....: mklbl('D',2)])

....:

In [48]: micolumns = pd.MultiIndex.from_tuples([('a','foo'),('a','bar'),

....: ('b','foo'),('b','bah')],

....: names=['lvl0', 'lvl1'])

....:

In [49]: dfmi = pd.DataFrame(np.arange(len(miindex)*len(micolumns)).reshape((len(miindex),len(micolumns))),

....: index=miindex,

....: columns=micolumns).sort_index().sort_index(axis=1)

....:

In [50]: dfmi

Out[50]:

lvl0 a b

lvl1 bar foo bah foo

A0 B0 C0 D0 1 0 3 2

D1 5 4 7 6

C1 D0 9 8 11 10

D1 13 12 15 14

C2 D0 17 16 19 18

D1 21 20 23 22

C3 D0 25 24 27 26

... ... ... ... ...

A3 B1 C0 D1 229 228 231 230

C1 D0 233 232 235 234

D1 237 236 239 238

C2 D0 241 240 243 242

D1 245 244 247 246

C3 D0 249 248 251 250

D1 253 252 255 254

这就是他们选择不同行的方式:In [51]: dfmi.loc[(slice('A1','A3'),slice(None), ['C1','C3']),:]

Out[51]:

lvl0 a b

lvl1 bar foo bah foo

A1 B0 C1 D0 73 72 75 74

D1 77 76 79 78

C3 D0 89 88 91 90

D1 93 92 95 94

B1 C1 D0 105 104 107 106

D1 109 108 111 110

C3 D0 121 120 123 122

... ... ... ... ...

A3 B0 C1 D1 205 204 207 206

C3 D0 217 216 219 218

D1 221 220 223 222

B1 C1 D0 233 232 235 234

D1 237 236 239 238

C3 D0 249 248 251 250

D1 253 252 255 254

所以很简单,在df.loc[(indices),:]中,您可以指定每个级别要选择的索引,从最高级别到最低级别。如果不想选择索引的最低级别,可以忽略指定它们。如果不想在其他指定级别之间创建切片,则添加slice(None)。两种情况都显示在示例中,其中级别D被省略,级别B在A和C之间指定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值