Python Pandas: 将自定义函数仅应用于一个 groupby 列

Python Pandas: Apply custom function to just one groupby column

我指的是 this post,其中一个自定义 lambda 函数在分组时的聚合步骤中应用于一个特定的列。

In [67]: f = {'A':['sum','mean'], 'B':['prod'], 'D': lambda g: df.ix[g.index].E.sum()}

In [69]: df.groupby('GRP').agg(f)
Out[69]:
            A                   B         D
          sum      mean      prod  <lambda>
GRP
0    0.719580  0.359790  0.102004  1.170219
1    0.454824  0.227412  0.034060  1.182901

我想知道是否可以在不明确指定 A 列和 B 列的情况下实现这一点。我正在寻找一种方法,将标准方法(如 sum 或 mean)应用于 除 D 列 之外的所有列,并应用自定义 lambda 函数 D 列

像这样:

f = {'sum', 'D': lambda g: df.ix[g.index].E.sum()}

如果是针对所有列,只需创建一个简单的列表理解,然后更新D,这应该就足够了。

# default aggregate function for all columns    
f = {x : 'sum' for x in df.columns}

# override custom function for specific column
f['D'] = lambda g: df.loc[g.index].E.sum()

# apply aggregate to groupby
df.groupby('GRP').agg(f).reindex(columns=df.columns)


            A         B         C         D         E  GRP
GRP                                                       
0    0.719581  0.684144  0.707859  1.170218  1.170218    0
1    0.454824  0.523983  0.181761  1.182902  1.182902    2