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'])
这是可行的,但我不喜欢它有两个原因:
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'