gpt4 book ai didi

python - 在 Pandas 中,如何在 groupby.agg() 方法中应用 2 个自定义公式?

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:15 25 4
gpt4 key购买 nike

我有这个 df:

 A = pd.DataFrame([['Big', -2, 4, 1, 0], ['Medium', 4, 4, -1, -1], ['Big', 3, -3, -2, -1], ['Small', 0, -1, -3, 5], ['Small', 1, 4, -2, 5]],
columns=['A', 'B', 'C', 'D', 'E'], index=[1, 2, 3, 4, 5])

我想按 A 分组,并在其他列上进行计算('mean'、'std' 和两个自定义)。自定义函数只计算 >= 0 的元素,以及 < 0 的元素。这将是输出:

                                         A
Big Medium Small
mean std Up Down mean std Up Down mean std Up Down
B 0.50 3.53 1 1 4 Nan 1 0 0.50 0.70 2 0
C 0.50 4.94 1 1 4 Nan 1 0 1.50 3.53 1 1
D -0.50 2.12 1 1 -1 Nan 0 1 -2.50 0.70 0 2
E -0.25 0.70 1 1 -1 Nan 0 1 5.00 0.0 2 0

注意:显示不必是这种形状,重要的是它包含我需要的所有信息。

到目前为止我得到了这个

f = ['mean', 'std']
A.groupby(A['A']).agg(f)

B C D E
mean std mean std mean std mean std
A
Big 0.5 3.535534 0.5 4.949747 -0.5 2.121320 -0.5 0.707107
Medium 4.0 NaN 4.0 NaN -1.0 NaN -1.0 NaN
Small 0.5 0.707107 1.5 3.535534 -2.5 0.707107 5.0 0.000000

我坚持使用其他两个函数,我尝试做自定义公式

function = ['mean', 'std', (lambda x: x >= 0).sum(), (lambda y: y < 0).sum()]

但是我得到:

AttributeError: 'function' object has no attribute 'sum'

谢谢

最佳答案

In [17]: def up(x):
return (x>=0).sum()
....:

In [18]: def down(x):
return (x<0).sum()
....:

In [19]: f = ['mean', 'std', up, down]

In [20]: A.groupby(A['A']).agg(f)
Out[20]:
B C D \
mean std up down mean std up down mean std
A
Big 0.5 3.535534 1 1 0.5 4.949747 1 1 -0.5 2.121320
Medium 4.0 NaN 1 0 4.0 NaN 1 0 -1.0 NaN
Small 0.5 0.707107 2 0 1.5 3.535534 1 1 -2.5 0.707107

E
up down mean std up down
A
Big 1 1 -0.5 0.707107 1 1
Medium 0 1 -1.0 NaN 0 1
Small 0 2 5.0 0.000000 2 0

你有两个问题:

首先,您将括号放在错误的位置:(lambda x: x >= 0).sum() 应该是 lambda x: (x >= 0 .sum().

第二个是 pandas 试图从聚合函数的名称中找出 agg() 的列名称,因此如果您尝试将两个 lambda 函数传递给agg(),你会得到一个错误。将它们定义为函数可以解决这个问题(正如我在上面所做的那样)。

关于python - 在 Pandas 中,如何在 groupby.agg() 方法中应用 2 个自定义公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26351990/

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