我正在尝试使用函数从pandas数据框的多个列中计算多个列。该函数需要三个参数-a-,-b-和-c-,并返回三个计算值-sum-,-prod-和-quot-。在我的pandas数据框中,我有三个列-a-,-b-和-c-,我想要从这些列中计算出-sum-,-prod-和-quot-。
当我只有三行时,我所做的映射才有效。我不知道出了什么问题,但我认为它与选择正确的轴有关。有人能解释一下发生了什么以及如何计算我想要的值吗?
以下是我测试过的情况。 初始值
这正是我想要的结果:sum-column 中的数字是 a、b、c 三列数值之和;prod-column 中的数字是 a、b、c 三列数值之积;quot-column 中的数字是 a、b、c 三列数值之商。请保留 HTML 标签,不作解释。 使用多于三行 当我增加一行数据到数据框时,就会出现错误!
数据框定义如下:
结果是
结果是
当我只有三行时,我所做的映射才有效。我不知道出了什么问题,但我认为它与选择正确的轴有关。有人能解释一下发生了什么以及如何计算我想要的值吗?
以下是我测试过的情况。 初始值
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
这正是我想要的结果:sum-column 中的数字是 a、b、c 三列数值之和;prod-column 中的数字是 a、b、c 三列数值之积;quot-column 中的数字是 a、b、c 三列数值之商。请保留 HTML 标签,不作解释。 使用多于三行 当我增加一行数据到数据框时,就会出现错误!
数据框定义如下:
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)我需要如何修改调用才能获取所需的数据框?
注意
在此链接中,提出了类似的问题,但给出的答案对我没有起作用。
df['sum'] = df['a'] + df['b'] + df['c']
,其他操作也是同理。除非这只是一个错误的例子。 - DJK