我有一个嵌套的具有3个级别的多索引数据框,我想选择第一和第三级别而不选择第二级别。可以这样做吗?
我当前的代码如下所示(已更新)。现在我收到TypeError:无法散列的类型:熊猫的“切片”,我不确定为什么。 “ D”和“ E”是我要从第3级中选择的列。
df1_1 = data['A'].loc['B',:,'D','E']
答案 0 :(得分:0)
使用pandas docs中的示例数据帧,可以将loc
与axis
参数一起使用,或者使用切片器或IndexSlice:
设置:
def mklbl(prefix,n):
return ["%s%s" % (prefix,i) for i in range(n)]
miindex = pd.MultiIndex.from_product([mklbl('A',4),
mklbl('B',2),
mklbl('C',4),
mklbl('D',2)])
micolumns = pd.MultiIndex.from_tuples([('a','foo'),('a','bar'),
('b','foo'),('b','bah')],
names=['lvl0', 'lvl1'])
dfmi = pd.DataFrame(np.arange(len(miindex)*len(micolumns)).reshape((len(miindex),len(micolumns))),
index=miindex,
columns=micolumns).sort_index().sort_index(axis=1)
dfmiT = dfmi.T.copy()
dfmiT
输入数据框:
A0 ... A3 \
B0 B1 ... B0 B1
C0 C1 C2 C3 C0 ... C3 C0 C1
D0 D1 D0 D1 D0 D1 D0 D1 D0 D1 ... D0 D1 D0 D1 D0
lvl0 lvl1 ...
a bar 1 5 9 13 17 21 25 29 33 37 ... 217 221 225 229 233
foo 0 4 8 12 16 20 24 28 32 36 ... 216 220 224 228 232
b bah 3 7 11 15 19 23 27 31 35 39 ... 219 223 227 231 235
foo 2 6 10 14 18 22 26 30 34 38 ... 218 222 226 230 234
让我们将.loc
与axis
参数一起使用:
dfmiT.loc(axis=1)['A3',:,'C2']
输出:
A3
B0 B1
C2 C2
D0 D1 D0 D1
lvl0 lvl1
a bar 209 213 241 245
foo 208 212 240 244
b bah 211 215 243 247
foo 210 214 242 246