相关疑难解决方法(0)

将多个函数应用于多个groupby列

文档说明如何将GROUPBY对象在同一时间使用的字典与输出列名作为关键字应用多个功能:

In [563]: grouped['D'].agg({'result1' : np.sum,
   .....:                   'result2' : np.mean})
   .....:
Out[563]: 
      result2   result1
A                      
bar -0.579846 -1.739537
foo -0.280588 -1.402938
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于Series groupby对象.当dict类似地传递给一个由DataFrame组成的组时,它希望键是该函数将应用于的列名.

我想要做的是将多个函数应用于多个列(但某些列将被多次操作).此外,某些函数将依赖于groupby对象中的其他列(如sumif函数).我目前的解决方案是逐列,并执行类似上面的代码,使用lambdas作为依赖于其他行的函数.但这需要很长时间,(我认为迭代一个groupby对象需要很长时间).我将不得不改变它,以便我在一次运行中遍历整个groupby对象,但我想知道在pandas中是否有一种内置的方式可以做得有点干净.

例如,我尝试过类似的东西

grouped.agg({'C_sum' : lambda x: x['C'].sum(),
             'C_std': lambda x: x['C'].std(),
             'D_sum' : lambda x: x['D'].sum()},
             'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样,我得到一个KeyError(因为如果agg从DataFrame中调用键,则键必须是一个列).

有没有内置的方法来做我想做的事情,或者可能添加这个功能的可能性,还是我只需要手动迭代组合?

谢谢

python group-by aggregate-functions pandas

183
推荐指数
6
解决办法
14万
查看次数

Pandas DataFrame使用多列聚合函数

有没有办法编写DataFrame.agg方法中使用的聚合函数,可以访问聚合的多个数据列?典型的用例是加权平均加权标准偏差函数.

我希望能够写出类似的东西

def wAvg(c, w):
    return ((c * w).sum() / w.sum())

df = DataFrame(....) # df has columns c and w, i want weighted average
                     # of c using w as weight.
df.aggregate ({"c": wAvg}) # and somehow tell it to use w column as weights ...
Run Code Online (Sandbox Code Playgroud)

python pandas

63
推荐指数
5
解决办法
3万
查看次数

如何将多个功能应用于groupby对象

例如,我有两个lambda函数可应用于分组的数据帧:

df.groupby(['A', 'B']).apply(lambda g: ...)
df.groupby(['A', 'B']).apply(lambda g: ...)
Run Code Online (Sandbox Code Playgroud)

两者都可以,但不能同时使用:

df.groupby(['A', 'B']).apply([lambda g: ..., lambda g: ...])
Run Code Online (Sandbox Code Playgroud)

这是为什么?如何将不同的功能应用于已分组的对象,并使每个结果按列逐列连接在一起?

有没有一种方法可以不为函数指定某些列?您建议的所有内容似乎仅适用于某些列。

python dataframe pandas

7
推荐指数
1
解决办法
2941
查看次数