假设我按A
key
进行分组
A = pd.DataFrame({ 'key':['II','I','I','III','II'],
'Z':['a', 'b', 'c', 'd', 'e'],
'd':[1,2,0,2,0],
'e':[0,2,0,3,0],
'f':[0,3,0,4,0],})
我希望每列都有不同聚合。例如:
sum()
f
{li> max()
e
{li> mean()
d
Z
(ae,bc,d)由于我无法从DataFrameGroupedBy中分离提取列,因此我必须将A
拆分为4个不同的DataFrame,其中列[key, c]
,[key, d]
,[key, e]
,{在[key, f]
之前{1}},将不同的agregations应用于每个,然后按groupby
合并。
这看起来有点荒谬,需要很多代码。有更优雅的方式吗?
答案 0 :(得分:5)
您可以使用dict
df = A.groupby('key').agg({'f':'sum','e':'max','d':'mean', 'Z': ''.join})
print (df)
d Z f e
key
I 1.0 bc 3 2
II 0.5 ae 0 0
III 2.0 d 4 3
列和聚合函数:
MaterialBetterSpinner
答案 1 :(得分:3)
您还可以使用agg
和传递的字典命名列。
f = dict(
f={'Sum of f': 'sum'},
e={'Max of e': 'max'},
d={'Mean of d': 'mean'},
Z={'Concat of Z': 'sum'},
)
A.groupby('key').agg(f)
f e d Z
Sum of f Max of e Mean of d Concat of Z
key
I 3 2 1.0 bc
II 0 0 0.5 ae
III 4 3 2.0 d
但是,如果您不想pd.MultiIndex
它可能更容易使用rename
f = dict(
f='sum',
e='max',
d='mean',
Z='sum',
)
m = dict(
f='Sum of f',
e='Max of e',
d='Mean of d',
Z='Concat of Z'
)
A.groupby('key').agg(f).rename(columns=m)
Sum of f Max of e Mean of d Concat of Z
key
I 3 2 1.0 bc
II 0 0 0.5 ae
III 4 3 2.0 d
答案 2 :(得分:1)
或者,如果您想要关键组中列的所有基本统计信息。
A.groupby('key').describe()