groupby agg 期间的动态列命名

Dynamic column naming during groupby agg

提问人:thefrollickingnerd 提问时间:10/20/2022 更新时间:10/20/2022 访问量:75

问:

我想执行

df.groupby([columns]).agg(new_name1=('col1':'min'),
                          new_name2=('col1':'max'),
                          new_name3=('col2':'mean'))

我希望能够动态指定新的列名,以便此函数是通用的。 即 -

d = {
     'new_name1':('col1':'min'), 
     'new_name2':('col1':'max'),
     'new_name3':('col2':'mean')
    }

然后在 agg 中使用这个字典,做类似的事情

groupby([columns]).agg(d)

目前我能做的就是

groupby([columns]).agg({'col1':['min', 'max'] 'col2':['mean']}).reset_index()

但这会返回一个数据帧,其中聚合向下一个级别,我无法重命名它们。

python-3.x 熊猫

评论


答:

2赞 Ynjxsjmh 10/20/2022 #1

你可以用它来解压缩字典,没有像这样的语法**('col1':'min')

d = {
     'new_name1':('col1','min'), 
     'new_name2':('col1','max'),
     'new_name3':('col2','mean')
}


groupby([columns]).agg(**d)

评论

0赞 Ynjxsjmh 10/20/2022
@thefrollickingnerd 为什么它不起作用?显示示例输入和输出。
0赞 thefrollickingnerd 10/20/2022
抱歉,我以为我已经尝试过这种组合,但显然我没有。这确实有效。多么令人沮丧!本来可以避免需要发帖的......
0赞 G.G 10/20/2022 #2
    str1="df1.groupby('School').agg({})"

str2="new_name1=('Height','min'),new_name2=('Height','max'),new_name3=('Weight','mean')"#build as your need
eval(str1.format(str2))