Pandas中的Transform函数

4

我知道在Pandas中可以给聚合操作取名,方法如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col': [1,2,3],
                   'group' : ['a','a','b']})

    
df.groupby('group').agg(mymean = ('col', 'mean'),
       mymax = ('col', 'max'),
       mymin = ('col', 'min'))

Out[23]: 
       mymean  mymax  mymin
group                      
a         1.5      2      1
b         3.0      3      3

这很方便,因为我可以创建多个变量并实时命名。 我希望能够用.transform()(或.apply())做同样的事情。 不幸的是,同样的技巧不起作用:

df.groupby('group').transform(mymean = ('col', 'mean'),
       mymax = ('col', 'max'),
       mymin = ('col', 'min'))
Traceback (most recent call last):

  File "<ipython-input-24-3a6cf53bd93e>", line 1, in <module>
    df.groupby('group').transform(mymean = ('col', 'mean'),

TypeError: transform() missing 1 required positional argument: 'func'

什么是使用 transform 创建多个变量的最简洁方式?输出应该是:
Out[25]: 
   col group  mymean  mymax
0    1     a       1      2
1    2     a       1      2
2    3     b       3      3
1个回答

4
您只需要执行 assign 即可。
df.assign(mymean = df['col1'].mean(),mymax = df['col1'].max())
Out[344]: 
   col1  mymean  mymax
0     1     2.0      3
1     2     2.0      3
2     3     2.0      3

天哪!!!原来这么简单?assign可以和groupby一起使用吗? - ℕʘʘḆḽḘ
让我稍微根据例子进行一些修改。 - ℕʘʘḆḽḘ
嗯...我无法让它工作...你能行吗?谢谢! - ℕʘʘḆḽḘ
1
如果使用groupby的if语句,我认为df.merge(df.groupby('group').agg().reset_index())已经足够好了~ - BENY
@ℕʘʘḆḽḘ,然后我们通常会清除数据...或者将NA分配给新的唯一组。 - BENY
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接