如何在我打算映射到新值的索引上聚合(求和)?基本上我有两个变量的groupby
结果,我希望将一个变量分组为更大的类。以下代码通过映射第一个副变量对s
执行此操作,但似乎过于复杂:
import pandas as pd
mapping={1:1, 2:1, 3:3}
s=pd.Series([1]*6, index=pd.MultiIndex.from_arrays([[1,1,2,2,3,3],[1,2,1,2,1,2]]))
x=s.reset_index()
x["level_0"]=x.level_0.map(mapping)
result=x.groupby(["level_0", "level_1"])[0].sum()
有没有办法更简洁地写这个?
答案 0 :(得分:3)
level=
有一个Series.sum()
选项,我想你可以使用它,这将是一个非常简洁的方法。
In [69]:
s.index = pd.MultiIndex.from_tuples(map(lambda x: (mapping.get(x[0]), x[1]), s.index.values))
s.sum(level=(0,1))
Out[69]:
1 1 2
2 2
3 1 1
2 1
dtype: int64