python - 将其中一个索引作为元组的 MultiIndex

标签 python pandas

我创建了一个带有多索引的数据框,其中一个索引是一个元组。我无法使用 .loc 进行索引。

这是数据框:

a = [['a','a','a','b','b','b','c','c'],[('one',2),('one',1),('two',1),('two',1),('two',2),('one',2),('two',2),('one',1)]]
t_index=pd.MultiIndex.from_tuples(list(zip(*a)),names=['letters','numbers'])

b=[1,4,3,5,7,2,6,1]

df=pd.DataFrame({'position':b},t_index)
print(df)
                  position
letters numbers           
a       (one, 2)         1
        (one, 1)         4
        (two, 1)         3
b       (two, 1)         5
        (two, 2)         7
        (one, 2)         2
c       (two, 2)         6
        (one, 1)         1

当我尝试使用 .loc 访问时,出现以下错误:

df.loc[('a',('one',2))]
"None of [('one', 2)] are in the [columns]"

除非真的不推荐,否则我更喜欢将“数字”索引保留为元组而不是两个值。有人可以指出我哪里出错了,或者我应该怎么做才能访问索引?

最佳答案

您可以使用loc + xs

df.loc['a'].xs(('one',2))

或者:

df.xs(['a', ('one',2)],level=[0,1])

或者(更直观)

df.xs(['a', ('one',2)],level=['letters','numbers'])

输出:

                  position
letters numbers 
a   (one, 2)         1

关于python - 将其中一个索引作为元组的 MultiIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51596554/

相关文章:

python - 如何在OpenShift上运行各种worker?

python - 如何用Python和sklearn编写多元对数回归?

python - Sphinx autodoc 无法导入模块

python - Pandas NLTK 标记 "unhashable type: ' 列表'"

python - Numpy:条件检查后返回 boolean 数组

python - 为什么 async pysnmp 这么慢?

python - 在 Pandas 列中查找正则表达式模式

python - Pandas 根据索引名称突出显示行

python - 当数据框的列包含多个值时选择数据框的行

python - 如何反转 Pandas 数据框中的字符串?