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
我指的是 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