提问人:thefrollickingnerd 提问时间:10/20/2022 更新时间:10/20/2022 访问量:75
groupby agg 期间的动态列命名
Dynamic column naming during groupby agg
问:
我想执行
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()
但这会返回一个数据帧,其中聚合向下一个级别,我无法重命名它们。
答:
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))
评论