gpt4 book ai didi

pandas - 如何从 Pandas 中的多列计算多列

转载 作者:行者123 更新时间:2023-12-05 02:18:34 29 4
gpt4 key购买 nike

我正在尝试使用函数从 pandas 数据框中的多个列计算多个列。该函数采用三个参数 -a-、-b- 和 -c-,并返回三个计算值 -sum-、-prod- 和 -quot-。在我的 pandas 数据框中,我有三个列 -a-、-b- 和 -c-,我想从中计算列 -sum-、-prod- 和 -quot-。

只有当我恰好有三行时,我所做的映射才有效。我不知道出了什么问题,尽管我希望它必须通过选择正确的轴来做一些事情。有人可以解释发生了什么以及我如何计算我想要的值。以下是我测试过的情况。

初始值

def sum_prod_quot(a,b,c):
sum = a + b + c
prod = a * b * c
quot = a / b / c
return (sum, prod, quot)

df = pd.DataFrame({ 'a': [20, 100, 18],
'b': [ 5, 10, 3],
'c': [ 2, 10, 6],
'd': [ 1, 2, 3]
})

df
a b c d
0 20 5 2 1
1 100 10 10 2
2 18 3 6 3

计算步骤

正好使用三行

当我从此数据框中计算三列并使用我得到的函数函数时:

df['sum'], df['prod'], df['quot'] = \
list( map(sum_prod_quot, df['a'], df['b'], df['c']))

df
a b c d sum prod quot
0 20 5 2 1 27.0 120.0 27.0
1 100 10 10 2 200.0 10000.0 324.0
2 18 3 6 3 2.0 1.0 1.0

这正是我想要的结果:总和列具有 a、b、c 列中元素的总和; prod 列包含 a、b、c 列中元素的乘积,quot 列包含 a、b、c 列中元素的商。

使用多于三行

当我用一行扩展数据框时,出现错误!

数据框定义为:

df = pd.DataFrame({ 'a': [20, 100, 18, 40],
'b': [ 5, 10, 3, 10],
'c': [ 2, 10, 6, 4],
'd': [ 1, 2, 3, 4]
})
df
a b c d
0 20 5 2 1
1 100 10 10 2
2 18 3 6 3
3 40 10 4 4

电话是

df['sum'], df['prod'], df['quot'] = \
list( map(sum_prod_quot, df['a'], df['b'], df['c']))

结果是

...
list( map(sum_prod_quot, df['a'], df['b'], df['c']))
ValueError: too many values to unpack (expected 3)

虽然我希望有额外的一行:

df
a b c d sum prod quot
0 20 5 2 1 27.0 120.0 27.0
1 100 10 10 2 200.0 10000.0 324.0
2 18 3 6 3 2.0 1.0 1.0
3 40 10 4 4 54.0 1600.0 1.0

使用少于三行

当我用一行减少数据帧时,我也会收到错误消息。数据框定义为:

df = pd.DataFrame({ 'a': [20, 100],
'b': [ 5, 10],
'c': [ 2, 10],
'd': [ 1, 2]
})
df
a b c d
0 20 5 2 1
1 100 10 10 2

电话是

df['sum'], df['prod'], df['quot'] = \
list( map(sum_prod_quot, df['a'], df['b'], df['c']))

结果是

...
list( map(sum_prod_quot, df['a'], df['b'], df['c']))
ValueError: need more than 2 values to unpack

虽然我希望少排:

df
a b c d sum prod quot
0 20 5 2 1 27.0 120.0 27.0
1 100 10 10 2 200.0 10000.0 324.0

问题

我的问题:

1) 为什么会出现这些错误?

2) 我该如何修改调用以获得所需的数据帧?

注意

this link问了一个类似的问题,但给定的答案对我不起作用。

最佳答案

3 行的答案似乎也不正确。你能检查除第一行和第一列以外的其他值吗?查看结果,20*5*2 的乘积是NOT 120,它是200,放在下面在 sum 列中。在分配给新列之前,您需要以正确的方式形成列表。您可以尝试使用以下设置新列:

df['sum'], df['prod'], df['quot'] = zip(*map(sum_prod_quot, df['a'], df['b'], df['c']))

详情请关注 link

关于pandas - 如何从 Pandas 中的多列计算多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989425/

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