【发布时间】:2016-12-10 23:28:11
【问题描述】:
我想从二级级别将 MultiIndex DataFrame 分割为多个值。例如,在以下 DataFrame 中:
val1 val2
ind1 ind2 ind3
1 6 s1 10 8
2 7 s1 20 6
3 8 s2 30 4
4 9 s2 50 2
5 10 s3 60 0
我希望只切片 ind3 == s1 或 ind3 == s3:
val1 val2
ind1 ind2
1 6 10 8
2 7 20 6
5 10 60 0
最好的假设选项是将多个参数传递给.xs,因为可以显式声明所需的level。
我显然可以连接所有按单值切片的数据帧:
In[2]: pd.concat([df.xs('s1',level=2), df.xs('s3',level=2)])
Out[2]:
val1 val2
ind1 ind2
1 6 10 8
2 7 20 6
5 10 60 0
但是 (a) 当使用超过 2 个值时,它很乏味且不那么可读,并且 (b) 对于大型 DataFrame,它非常重(或至少比多值切片选项(如果存在)。
这是构建示例 DataFrame 的代码:
import pandas as pd
df = pd.DataFrame({'ind1':[1,2,3,4,5], 'ind2':[6,7,8,9,10], 'ind3':['s1','s1','s2','s2','s3'], 'val1':[10,20,30,50,60], 'val2':[8,6,4,2,0]}).set_index(['ind1','ind2','ind3'])
【问题讨论】:
标签: python pandas dataframe multi-index