Python 使用变量访问多索引

Python 使用变量访问多索引,python,pandas,Python,Pandas,我很难通过编程方式访问带有多索引的熊猫数据帧。假设我有 import pandas as pd df = pd.DataFrame([[0, 0, 0, 1], [0, 0, 1, 2], [0, 1, 0, 7], [0, 1, 1, 9], [1, 0, 0, 1], [1, 0, 1, 0],

我很难通过编程方式访问带有多索引的熊猫数据帧。假设我有

import pandas as pd

df = pd.DataFrame([[0, 0, 0, 1],
                  [0, 0, 1, 2], 
                  [0, 1, 0, 7],
                  [0, 1, 1, 9],
                  [1, 0, 0, 1],
                  [1, 0, 1, 0],
                  [1, 1, 0, 1],
                  [1, 1, 1, 10]], columns=['c1', 'c2', 'c3', 'value'])

sums = df.groupby(['c1', 'c2', 'c3']).value.sum()
我可以得到与c1,c2和c3的[1,1,1]组合相对应的和

sums[1, 1, 1]
这会像预期的那样返回10

但是如果我有一个变量呢

q = [1, 1, 1]
如何获得相同的值

我试过了

sums[q]

c1  c2  c3
0   0   1     2
        1     2
        1     2
Name: value, dtype: int64
我还认为star operator可以工作:

sums[*q]
但这是无效的语法。

元组一起使用:

print (sums.xs((1,1,1)))
10
或:



我查看了
\uuu getitem\uuu
的代码,现在看到了元组的行为。如果您将答案更改为
sums[tuple(q)]
我会接受。请使用eval和字符串representation@KannappanSirchabesan那不是个好主意suggestion@RafaelC有什么特别的原因吗?将索引存储在字符串中,然后
eval
出于无限的原因对字符串进行评估,这是一种可怕的设计。。例如,您刚刚硬编码了要执行的操作,如果必须操作任何索引,则必须执行字符串操作(这既慢又不必要地昂贵)。@RafaelC感谢您的解释。对于这个问题,你可以接受的答案是什么?还是这个问题本身就是一个低效的答案?
print (sums.loc[(1,1,1)])
#alternative
#print (sums[(1,1,1)])
10
q = [1, 1, 1]
print (sums.loc[tuple(q)])
#alternative
#print (sums[tuple(q)])
10