3

我有一个 MultiIndex,其中一些级别用字符串标记,其他级别用整数标记:

import pandas as pd
metrics = ['PT', 'TF', 'AF']
n_replicates = 3
n_nodes = 6
cols = [(r,m,n) for r in range(n_replicates) for m in metrics for n in range(n_nodes)]
cols = pd.MultiIndex.from_tuples(cols,names = ['Replicates', 'Metrics', 'Nodes'])

ind = range(5)
df = pd.DataFrame(columns=cols, index=ind)
df.sortlevel(level=0, axis=1, inplace=True)

如果我想选择带有整数标签的单列,没问题:

df[2,'AF',10]

但是,如果我尝试选择一个范围:

df[1:4,'AF',10]
TypeError: 
(No message given)

如果我遗漏了最后一层,我会得到一个不同的错误:

df.sortlevel(level=0,axis=1,inplace=True)
df[1:4,'AF']
TypeError: unhashable type

当我使用整数作为列标签时,我怀疑我在玩火。只是将它们全部作为字符串的“安全”路线吗?或者还有其他方法可以用整数标签索引 MuliIndex 数据帧吗?

编辑:我现在很清楚我应该使用 .loc。好的。但是,我仍然不清楚与 MultiIndex 的较低级别进行交互。

df.loc[:,:] #Good
df.loc[:,1:2] #Good
df.loc[:,[1:2, 'AF']]
SyntaxError: invalid syntax
df.loc[:,1:2].xs('AF', level='Metrics', axis=1) #Good

最后一行是我需要使用的吗?如果是这样,那很好。它足够长,让我觉得我不知道更好的方法。谢谢您的帮助!

4

0 回答 0