当前位置: 首页 > 知识库问答 >
问题:

Python中的GroupBy函数,如SUM(col_1*col_2)、加权平均等

轩辕庆
2023-03-14

是否可以直接计算两列的乘积(例如和),而不使用

grouped.apply(lambda x: (x.a*x.b).sum()

它的使用速度要快得多(不到我机器上的一半时间)

df['helper'] = df.a*df.b
grouped= df.groupby(something)
grouped['helper'].sum()
df.drop('helper', axis=1)

但是我真的不喜欢这样做。例如,计算每组的加权平均值是有用的。这里的λ方法是

grouped.apply(lambda x: (x.a*x.b).sum()/(df.b).sum())

这比用b.sum()除以helper要慢得多。

共有3个答案

印辉
2023-03-14

多年后,答案通过pydata blaze得出

from blaze import *
data = Data(df)
somethings = odo(
by(data.something, 
   wm = (data.a * data.weights).sum()/data.weights.sum()),
pd.DataFrame)
齐文栋
2023-03-14

将x.a*x.b的结果直接分组,例如:

from pandas import *
from numpy.random import randn
df = DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
               'foo', 'bar', 'foo', 'foo'],
        'B' : ['one', 'one', 'two', 'three',
               'two', 'two', 'one', 'three'],
        'C' : randn(8), 'D' : randn(8)})

print (df.C*df.D).groupby(df.A).sum()
黎震博
2023-03-14

我希望最终构建一个嵌入式数组表达式计算器(Numexpr on steroids)来完成类似的工作。现在我们正在研究Python的局限性——如果您实现了一个Cython聚合器来执行(x*y)。sum()然后它可以与groupby连接,但理想情况下,您可以将Python表达式作为函数编写:

def weight_sum(x, y):
    return (x * y).sum()

这将得到“JIT编译”,速度大约与groupby(…)一样快。sum()。我所描述的是一个相当重要(几个月)的项目。如果有一个BSD兼容的APL实现,我可能能够更快地完成上面的工作(只是大声地思考一下)。

 类似资料:
  • 本文向大家介绍PHP计算加权平均数的方法,包括了PHP计算加权平均数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP计算加权平均数的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。

  • 我是新来的。任何帮助都将不胜感激 这是我的原始数据: 我想得到的是: 1创建一个新的列调用平均值,以计算每个提要的平均市值。 2求加权平均数。 这是我当前的代码,我得到NaN: 对于加权平均代码: 我得到了一个错误: AttributeError:“Series”对象没有属性“value”

  • 问题内容: 我正在写一个使用numpy中的卷积函数的移动平均函数,它应该等效于(加权移动平均)。当我的权重全部相等时(如简单的算术平均值),它可以正常工作: 给 但是,当我尝试使用加权平均值时 而不是(对于相同的数据)3.667,4.667,5.667,6.667,…我希望,我得到 如果删除“有效”标志,则什至看不到正确的值。我真的很想对WMA和MA使用convolve,因为它可以使代码更整洁(相

  • 问题内容: 我正在为Pyspark中的时间序列编写异常检测算法。我想计算(-3,3)或(-4,4)窗口的加权移动平均值。现在,我正在使用滞后和超前窗口功能,并将它们乘以一组权重。我的窗口当前是(-2,2)。 我想知道是否有另一种方法可以计算Pyspark中的加权移动平均值。 我正在使用的当前代码是: 问题答案: 您可以概括当前的代码: 它可以用作: 注意事项 : 您可能会考虑将滞后缺失的帧的结果标

  • 我正在写一个移动平均函数,它使用numpy中的卷积函数,它应该相当于一个(加权移动平均)。当我的权重都相等时(就像在一个简单的算术平均值中一样),它工作得很好: 给予 对这种行为有什么看法吗?

  • 我试图通过DP找到所有子数组的加权平均值,然后按列排序,找到长度相同的2。但我无法继续下去,我的方法似乎太模糊/太粗暴了。我将非常感谢任何帮助。提前谢了。

  • 问题内容: 尝试从计算中创建新列。在下面的代码中,我获得了每个日期的正确计算值(请参阅下面的组),但是当我尝试用它创建一个新列()时,我得到了NaN。因此,我正在尝试在数据框中使用Data3所有日期的总和创建一个新列,并将其应用于每个日期行。例如,2015-05-08位于2行中(总计为),在这个新列中,我希望两行中都具有55。 问题答案: 你要使用此方法将返回索引与df对齐的,然后可以将其添加为新

  • 问题内容: 示例数据: 我正在尝试获得上述数据的平均评分。 它需要的是每行*的总和除以总数 这是我正在尝试的操作,但给出的结果不正确(49.07,应为98.15): 可以在单个查询中完成吗?我正在使用SQL Server 问题答案: 只需回到加权平均的定义即可,因此使用s和除法: 如果愿意,可以将其转换为小数: