我有一个带有分层索引的大表,并且正在尝试选择它的子集。所讨论的实际表对于 axis-0 索引有 3 个级别,我希望级别 1 和 2 上的所有值以及级别 3 的一个选择。
对于我想要做的一个小型 2 级示例,这里是数据框设置:
import pandas as pd
import numpy as np
df = pd.DataFrame({'I1': [1,1,1,1,2,2,2,2,3,3,3,3],
'I2': ['foo', 'bar', 'blatz', 'blam',
'foo', 'bar', 'blatz', 'blam',
'foo', 'bar', 'blatz', 'blam'],
'V': np.arange(12)})
df = df.set_index(['I1', 'I2'])
print df
生成数据框:
V
I1 I2
1 foo 0
bar 1
blatz 2
blam 3
2 foo 4
bar 5
blatz 6
blam 7
3 foo 8
bar 9
blatz 10
blam 11
然后我有一个选择器系列:
> sel = pd.DataFrame({'I1': [1,2,3], 'I2': ['foo', 'blatz', 'bar']}).set_index(['I1'])
> print sel
I2
I1
1 foo
2 blatz
3 bar
所以我想做的是使用sel
来选择df
的子集。如果我只想为每个 I1 使用相同的 I2 值,xs
就可以解决问题,但它似乎不适用于一系列而不是单个值。
我尝试拆开 df
并使用系列来选择列,但这似乎不正确(并且导致我的机器内存不足)。
我的下一次尝试将重置 df
和 sel
上的索引,然后使用联接。这真的是最好的方法吗,还是我缺少更好的技巧?
最佳答案
您使用join
的直觉很好。这就是 Pandas 式的做法:
sel = pd.DataFrame({'I1': [1,2,3], 'I2': ['foo', 'blatz', 'bar']}).set_index(['I1','I2'])
print df.join(sel, how = 'right')
V
I1 I2
1 foo 0
2 blatz 6
3 bar 9
关于python - 在 Pandas 中为层次索引的内部维度选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27130602/