【发布时间】:2018-02-16 07:05:03
【问题描述】:
为什么.loc 只返回单行,而多行具有相同的MultiIndex?
给定以下数据框
col0 col1 col2
idx0 idx1
0 0 1.0 example1 1.0
0 4.0 example2 8.0
1 9.0 example3 27.0
1 16.0 example4 64.0
1 0 0.5 example1 0.5
0 2.0 example2 4.0
1 4.5 example3 13.5
1 8.0 example4 32.0
.xs 操作将选择
In [121]: df.xs((0,1), level=[0,1])
Out[121]:
col0 col1 col2
idx0 idx1
0 1 9.0 example3 27.0
1 16.0 example4 64.0
.loc 操作将选择
In [125]: df.loc[[(0,1)]]
Out[125]:
col0 col1 col2
idx0 idx1
0 1 16.0 example4 64.0
以下内容进一步强调了这一点
In [149]: df.loc[pd.IndexSlice[:, 1], :]
Out[149]:
col0 col1 col2
idx0 idx1
0 1 9.0 example3 27.0
1 16.0 example4 64.0
In [150]: df.loc[pd.IndexSlice[0, 1], :]
Out[150]:
col0 16
col1 example4
col2 64
Name: (0, 1), dtype: object
设置
import pandas as pd
import numpy as np
idx0 = range(2)
idx1 = np.repeat(range(2), 2)
midx = pd.MultiIndex(
levels=[idx0, idx1],
labels=[
np.repeat(range(len(idx0)), len(idx1)),
np.tile(range(len(idx1)), len(idx0))
],
names=['idx0', 'idx1']
)
df = pd.DataFrame(
[
[i**2/float(j), 'example{}'.format(i), i**3/float(j)]
for j in range(1, len(idx0) + 1)
for i in range(1, len(idx1) + 1)
],
columns=['col0', 'col1', 'col2'],
index=midx
)
【问题讨论】:
-
仅供参考:如果您使用
np.array作为dtype=int启动索引,它仍然存在问题,因此浮点不是问题 -
您使用的是哪个版本的熊猫?
-
我认为这可能属于错误类别,我已在以下地址提交了一个 github 问题:github.com/pandas-dev/pandas/issues/17464
标签: python pandas indexing multi-index