【发布时间】:2021-07-05 05:10:03
【问题描述】:
我有一个包含 MultiIndex 列(2 个级别)的数据框,并且对于第一列的不同组,第二个级别的标签不同。考虑这个例子:
df1 = pd.DataFrame(np.arange(12).reshape(4, 3),
columns=list('abc'))
df1.columns = pd.MultiIndex.from_product((["df1"], df1.columns))
df2 = pd.DataFrame(np.arange(100, 112).reshape(4, 3),
columns=list('def'))
df2.columns = pd.MultiIndex.from_product((["df2"], df2.columns))
df = pd.concat((df1, df2), axis=1)
看起来像这样
df1 df2
a b c d e f
0 0 1 2 100 101 102
1 3 4 5 103 104 105
2 6 7 8 106 107 108
3 9 10 11 109 110 111
现在我想找到一种简单的方法来检索第一组和第二组的一个或多个列。 IE。像
df1 df2
a b d
0 0 1 100
1 3 4 103
2 6 7 106
3 9 10 109
但是,无论我尝试什么,都行不通。 例如,
df.loc[:, [('df1', 'a'), ('df2', ['d', 'e'])]]
抛出TypeError: unhashable type: 'list'。
df.loc[:, [pd.IndexSlice['df1', 'a'], pd.IndexSlice['df2', ['d', 'e']]]]
有没有办法在不使用pd.concat 的情况下选择这些列?
【问题讨论】:
标签: python pandas indexing multi-index