代码之家  ›  专栏  ›  技术社区  ›  chthonicdaemon

使用变量访问大熊猫多索引

  •  1
  • chthonicdaemon  · 技术社区  · 6 年前

    我正努力通过编程访问一个包含多索引的熊猫数据帧。假设我有

    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
    

    我也认为明星运营商可以工作:

    sums[*q]
    

    但这是无效的语法。

    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    使用 Series.xs 具有 tuple :

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

    Series.loc :

    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