gpt4 book ai didi

python - 将列作为参数传递给 pandas groupby apply 函数

转载 作者:行者123 更新时间:2023-12-05 03:43:28 25 4
gpt4 key购买 nike

假设我有以下数据框:

a = np.random.rand(10)
b = np.random.rand(10)*10
c = np.random.rand(10)*100
groups = np.array([1,1,2,2,2,2,3,3,4,4])
df = pd.DataFrame({"a":a,"b":b,"c":c,"groups":groups})

我只想根据组按 df 进行分组,并将以下函数应用于每个组的两列(a 和 b):

def my_fun(x,y):
tmp = np.sum((x*y))/np.sum(y)
return tmp

我尝试的是:

df.groupby("groups").apply(my_fun,("a","b"))

但这不起作用并给我错误:

ValueError: Unable to coerce to Series, the length must be 4: given 2 

最终输出基本上是每组一个数字。我可以通过循环解决问题,但我认为应该有更好的方法?

谢谢

最佳答案

在不改变你的功能的情况下,你想要做的是:

df.groupby("groups").apply(lambda d: my_fun(d["a"],d["b"]))

输出:

groups
1 0.603284
2 0.183289
3 0.828273
4 0.361103
dtype: float64

也就是说,您可以重写您的函数,使其将数据帧作为第一个位置参数:

def myfunc(data, val_col, weight_col):
return np.sum(data[val_col]*data[weight_col])/np.sum(data[weight_col])

df.groupby('groups').apply(myfunc, 'a', 'b')

关于python - 将列作为参数传递给 pandas groupby apply 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66793098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com