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