【发布时间】:2019-09-06 01:40:56
【问题描述】:
我有一个带有 MultiIndex 列的 pandas DataFrame:
columns=pd.MultiIndex.from_tuples(
[(c, i) for c in ['a', 'b'] for i in range(3)])
df = pd.DataFrame(np.random.randn(4, 6),
index=[0, 0, 1, 1],
columns=columns)
print(df)
a b
0 1 2 0 1 2
0 0.582804 0.753118 -0.900950 -0.914657 -0.333091 -0.965912
0 0.498002 -0.842624 0.155783 0.559730 -0.300136 -1.211412
1 0.727019 1.522160 1.679025 1.738350 0.593361 0.411907
1 1.253759 -0.806279 -2.177582 -0.099210 -0.839822 -0.211349
我想按索引分组,并在a 列上使用“min”聚合,在b 列上使用“sum”聚合。
我知道我可以通过创建一个为每列指定 agg 函数的 dict 来做到这一点:
agg_dict = {'a': 'min', 'b': 'sum'}
full_agg_dict = {(c, i): agg_dict[c] for c in ['a', 'b'] for i in range(3)}
print(df.groupby(level=0).agg(full_agg_dict))
a b
0 1 2 0 1 2
0 0.498002 -0.842624 -0.900950 -0.354927 -0.633227 -2.177324
1 0.727019 -0.806279 -2.177582 1.639140 -0.246461 0.200558
有没有更简单的方法?似乎应该有一种方法可以使用agg_dict 而不使用full_agg_dict。
【问题讨论】:
-
不知道有没有更简单的。如果字典不遵循完美的模式,可能只是让字典更灵活(更容易阅读):
{x: agg_dict[x[0]] for x in df.columns}
标签: python pandas pandas-groupby