【发布时间】:2013-08-30 11:44:15
【问题描述】:
我有带有 MultiIndex 列的 DataFrame,如下所示:
# sample data
col = pd.MultiIndex.from_arrays([['one', 'one', 'one', 'two', 'two', 'two'],
['a', 'b', 'c', 'a', 'b', 'c']])
data = pd.DataFrame(np.random.randn(4, 6), columns=col)
data
从第二级仅选择特定列(例如['a', 'c'],而不是范围)的正确、简单方法是什么?
目前我正在这样做:
import itertools
tuples = [i for i in itertools.product(['one', 'two'], ['a', 'c'])]
new_index = pd.MultiIndex.from_tuples(tuples)
print(new_index)
data.reindex_axis(new_index, axis=1)
但是,这感觉不是一个好的解决方案,因为我必须退出 itertools,手动构建另一个 MultiIndex,然后重新索引(我的实际代码更加混乱,因为列列表不是这样易于获取)。我很确定必须有一些ix 或xs 这样做的方式,但我尝试的一切都导致了错误。
【问题讨论】:
-
你试过用字典吗?
-
不,我没有。你的意思是更快地构建MultiIndex?如果是这样,那不是重点-我想避免它并直接使用
data.xs(['a', 'c'], axis=1, level=1)之类的内容进行索引 -
你有这个级别作为第二级而不是第一级的原因吗?
-
对于我拥有的数据类型,我在视觉上更直观。另外,我想学习如何通用地做到这一点 - 对于任意级别。
-
在更高版本的 pandas 中,您可以使用
loc和pd.IndexSliceAPI,它现在是切片 MultIndexs 的首选方式。请参阅this answer 和 this post.
标签: python pandas multi-index hierarchical