我有一个带有两个浮点列的pandas数据帧,col_x
和col_y
我想返回col_x * col_y
之和除以col_x
之和
这可以通过自定义聚合函数来完成吗
我正在尝试这样做:
import pandas as pd
def aggregation_function(x, y):
return sum(x * y) / sum(x)
df = pd.DataFrame([(0.1, 0.2), (0.3, 0.4), (0.5, 0.6)], columns=["col_x", "col_y"])
result = df.agg(aggregation_function, axis="columns", args=("col_x", "col_y"))
我知道聚合函数可能没有意义,但我甚至无法尝试其他方法,因为我遇到了以下错误:
TypeError: apply() got multiple values for keyword argument 'args'
我不知道如何为我的聚合函数指定args
。我也尝试过使用kwargs
,但我所做的一切都不管用。在{a1}中没有这方面的例子,但似乎说这是可能的
如何为聚合函数指定参数
输出聚合的预期结果将是单个值
首先,您可以在
axis=1
上使用apply
来解决此类问题:但是,在您的案例中,这将导致错误,因为您拥有的聚合函数正在为每一行计算
col_x * col_y
,sum不适用于标量值,它需要一个iterable:因此
sum(0.2)
不起作用如果我们从聚合函数中移除总和,这将按预期工作:
然而,正如您所说,您希望将
col_x
之和除以col_x
和col_y
的乘法结果,您可以调整函数并使用series.sum
直接与数据帧一起使用,尽管这可以向量化为df['col_x'].mul(df['col_y']).sum()/df['col_x'].sum()
相关问题 更多 >
编程相关推荐