是否可以不使用而直接计算两列的乘积(例如求和)
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)
但是我真的不喜欢这样做。例如,计算每组的加权平均值很有用。这里的lambda方法是
grouped.apply(lambda x: (x.a*x.b).sum()/(df.b).sum())
再一次比将助手除以b.sum()慢得多。
我最终想构建一个嵌入式数组表达式评估器(类固醇上的Numexpr)来做这样的事情。现在,我们正在处理Python的局限性-
如果您实现了Cython聚合器,(x * y).sum()
则可以将其与groupby连接,但是理想情况下,您可以将Python表达式编写为函数:
def weight_sum(x, y):
return (x * y).sum()
这将得到“
JIT编译”,并且大约和groupby(…)。sum()一样快。我描述的是一个非常重要的项目(每个月)。如果有与BSD兼容的APL实现,我也许可以更快地完成上述操作(只是想一想)。
我是新来的。任何帮助都将不胜感激 这是我的原始数据: 我想得到的是: 1创建一个新的列调用平均值,以计算每个提要的平均市值。 2求加权平均数。 这是我当前的代码,我得到NaN: 对于加权平均代码: 我得到了一个错误: AttributeError:“Series”对象没有属性“value”
问题内容: 我有下表。我想根据以下公式计算按每个日期分组的加权平均值。我可以使用一些标准的常规代码来执行此操作,但是假设此数据在pandas数据框中,是否有比通过迭代更简单的方法来实现此目的? 2012年1月1日w_avg = 0.5 (60 / sum(60,80,100))+ .75 (80 / sum(60,80,100))+ 1.0 *(100 / sum(60,80,100)) 2012
问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:
我不能得到熊猫的平均值或平均值。有一个数据框。下面我尝试的东西都没有给我列的平均值 以下内容返回多个值,而不是一个值: 这也是:
问题内容: 我有一个数据框 我需要的是Adjusted_lots,price和ajusted_lots的加权平均价格之和,并按所有其他列进行分组,即。按(合同,月,年和购买)分组 R的类似解决方案是使用dplyr通过以下代码实现的,但是在熊猫中却无法做到这一点。 groupby或任何其他解决方案是否可能相同? 问题答案: 编辑: 更新聚合,以便它与熊猫的最新版本一起使用 要将多个函数传递给grou
问题内容: 我有一个这样的数据框: 如下所示,数据集不一定每天都有观察值: 我想添加一个新列,该列显示至少n天中每个用户过去n天(在这种情况下,n = 2)的平均值,否则它将有价值。例如,在John上得到一个,因为他没有和的数据。因此结果将是这样的: 在阅读了论坛中的几篇文章之后,我似乎应该结合使用和自定义,但是我还不太清楚该怎么做。 问题答案: 我认为您可以使用第一个convert列 ,然后通过
问题内容: 我在csv文件中有这样的数据 我可以像这样阅读和分组 我懂了 我希望这个(顺序无所谓) 我想知道是否有可能算零次 问题答案: 你可以用与: 如果您需要使用输出:
我必须根据以下col1、col2和loc的数据进行分组,并计算col3中的项数。此外,还应考虑开始和结束日期,即日期应在2021 1月1日至2021 1月31日之间。最终结果应显示在col4中。 数据 预期输出