如何在不为每列分配功能字典的情况下获得以下结果?
df.groupby(level=0).agg({'one': {'SUM': 'sum', 'HowMany': 'count'},
'two': {'SUM': 'sum', 'HowMany': 'count'}})
考虑df
:
import pandas as pd
import numpy as np
idx = pd.MultiIndex.from_product([['A', 'B'], ['One', 'Two']],
names=['Alpha', 'Numeric'])
df = pd.DataFrame(np.arange(8).reshape(4, 2), idx, ['one', 'two'])
df
我想使用groupby().agg()
来运行一组函数并重命名它们的输出列。
这很好用。
df.groupby(level=0).agg({'one': {'SUM': 'sum', 'HowMany': 'count'}})
但是我想为所有列做这个。我能做到这一点:
df.groupby(level=0).agg(['sum', 'count'])
但是我错过了我所做的伟大重命名。我希望这会奏效:
df.groupby(level=0).agg({'SUM': 'sum', 'HowMany': 'count'})
但它没有。我收到这个错误:
KeyError: 'SUM'
这是有道理的。 Pandas正在查看传递字典的键名列。这就是我开始工作的例子。
答案 0 :(得分:4)
您可以使用set_levels
:
g = df.groupby(level=0).agg(['sum', 'count'])
g.columns.set_levels(['SUM', 'HowMany'], 1, inplace=True)
g
>>>
one two
SUM HowMany SUM HowMany
Alpha
A 2 2 4 2
B 10 2 12 2
答案 1 :(得分:3)
正在使用.rename()
选项吗?
In [7]: df.groupby(level=0).agg(['sum', 'count']).rename(columns=dict(sum='SUM', count='HowMany'))
Out[7]:
one two
SUM HowMany SUM HowMany
Alpha
A 2 2 4 2
B 10 2 12 2
答案 2 :(得分:1)