python - pd.IndexSlice 列表

标签 python pandas indexing

输入:

midx = pd.MultiIndex.from_product([['A0','A1'], ['B0','B1','B2','B3']])
columns = ['foo', 'bar']
t = pd.DataFrame(np.arange(16).reshape((len(midx), len(columns))),
                    index=midx, columns=columns)

输出:

In [6]: t
Out[6]:
       foo  bar
A0 B0    0    1
   B1    2    3
   B2    4    5
   B3    6    7
A1 B0    8    9
   B1   10   11
   B2   12   13
   B3   14   15

问题:

v = pd.IndexSlice['A0','B0':'B1'] 。我可以访问 t.loc[v,:] :

In [13]: t.loc[v,:]
Out[13]:
       foo  bar
A0 B0    0    1
   B1    2    3

来自 [v,v] ,如何获取以下数据框?

In [13]: f([v,v])
Out[13]:
       foo  bar
A0 B0    0    1
   B1    2    3
   B0    0    1
   B1    2    3

我无法指定这些多索引切片器的列表:t.loc[[v,v],:]将引发异常:Unashable type: 'slice' 。为什么会这样呢?使用标量时,我可以轻松列出所需的位置:t.loc[[('A0','B0'),('A0','B1')],:] .

最佳答案

尝试:

t.loc[tuple(zip(v, v)),:]

应该是:

u = (['A0', 'A1'], [slice('B0', 'B1', None), slice('B0', 'B1', None)])

尝试采用上面的形式。

t.loc[u,:]

        foo bar
A0  B0  0   1
    B1  2   3
A1  B0  8   9
    B1  10  11

关于python - pd.IndexSlice 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65723761/

相关文章:

python - 从 matplotlib-venn 导出 SVG

python - python中的名称重整

python - 列中除某些词外的标题词

python - 在 Python pandas 中,从 1 而不是 0 开始行索引而不创建额外的列

java - 如何将字符串的多个部分放入列表中?

swift - Swift中链接列表的自定义索引

python - 根据 True/False "sets"在 pandas dataframe 中添加后续值

python - 如何从字符串中提取 float

python - 使用m1芯片在mac上安装python表

python - 从数据框中删除重复项,基于两列 A,B,在另一列 C 中保持具有最大值的行