Python 使用*不*在groupby中分组的标签

Python 使用*不*在groupby中分组的标签,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我已经写了一个代码,它计算的和如下 \sum_i a_{i,j} (读为“i的所有值的总和a”) 通过为每个组合i,j创建一个pd.Dataframe,然后使用groupby执行求和 考虑一个最小的例子 import pandas as pd from pandas import Series, DataFrame import numpy as np arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', '

我已经写了一个代码,它计算的和如下

\sum_i a_{i,j}
(读为“i的所有值的总和a”) 通过为每个组合
i,j
创建一个
pd.Dataframe
,然后使用groupby执行求和

考虑一个最小的例子

import pandas as pd
from pandas import Series, DataFrame
import numpy as np

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), 
          np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['i', 'j'])

df = pd.DataFrame(np.random.randn(8, 3), index=index, columns=['A', 'B', 'C'])
借来的

总而言之,我能做什么

df.groupby(level=['j']).sum()
或同等地

df.sum(level=['j'])
这是可行的,但我不喜欢它有两个原因:

  • 这是不可扩展的。每当我有一个新的“静默”索引时,我需要修改代码中不同位置的所有sum
  • 我觉得很难理解。在我的例子中,
    i
    j
    有一个明确的含义,因此我想把我的总结写清楚,以得到自我记录的代码
  • 我能做的就是

    i = [x for x in df.index.names if x != 'first']
    df.sum(level=i)
    
    虽然这解决了第一个问题,但我认为代码没有变得更清晰

    我有更好的熊猫功能或更适合的(python)工具吗?

    试试这个

    df.groupby(df.index.droplevel('i')).sum() # groupby except index 'i'