我有一个有两个级别的方阵:
index = [('A','a'),('A','b'),('B','a'),('B','b')]
index = pd.MultiIndex.from_tuples(index)
pd.DataFrame(index=index, columns=index)
A B
a b a b
A a NaN NaN NaN NaN
b NaN NaN NaN NaN
B a NaN NaN NaN NaN
b NaN NaN NaN NaN
iloc的预期结果:
a b
a NaN NaN
b NaN NaN
我想用iloc得到子方矩阵A(a,b)(a,b)。 我尝试了十几种方法并在stackoverflow上搜索,但我找不到用iloc获取矩阵的方法。使用loc它很简单,但我需要迭代,我不想导航到索引以获得性能问题的标签。
提前致谢。
答案 0 :(得分:0)
IIUC您可以先使用droplevel
删除MultiIndex
的最高级别:
index = [('A','a'),('A','b'),('B','a'),('B','b')]
index = pd.MultiIndex.from_tuples(index)
np.random.seed(100)
df = pd.DataFrame(np.random.rand(4,4),index=index, columns=index)
print (df)
A B
a b a b
A a 0.543405 0.278369 0.424518 0.844776
b 0.004719 0.121569 0.670749 0.825853
B a 0.136707 0.575093 0.891322 0.209202
b 0.185328 0.108377 0.219697 0.978624
df.columns = df.columns.droplevel(0)
df.index = df.index.droplevel(0)
print (df)
a b a b
a 0.543405 0.278369 0.424518 0.844776
b 0.004719 0.121569 0.670749 0.825853
a 0.136707 0.575093 0.891322 0.209202
b 0.185328 0.108377 0.219697 0.978624
a = df.iloc[:2,:2]
print (a)
a b
a 0.543405 0.278369
b 0.004719 0.121569
因为如果使用iloc
只在索引和列中获得MultiIndex
:
b = df.iloc[:2,:2]
print (b)
A
a b
A a 0.543405 0.278369
b 0.004719 0.121569
答案 1 :(得分:0)
使用jezrael的例子,这就是你要追求的目标吗?
df = df.iloc[[0,1],[0,1]]
Out[825]:
A
a b
A a 0.543405 0.278369
b 0.004719 0.121569
如果你只想要第二级,
df.index = df.index.droplevel(0)
df.columns = df.columns.droplevel(0)
print(df)
Out[835]:
a b
a 0.543405 0.278369
b 0.004719 0.121569