我正在尝试使用一个函数从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) 如何修改调用以获得所需的数据帧?
笔记
在这个链接中,有人问了一个类似的问题,但是给出的答案对我不起作用。
对于3
行,答案似乎也不正确。除了第一行和第一列
之外,您可以检查其他值吗?查看结果,20*5*2
的乘积不是120
,而是200
,并放置在下面的和
列中。在分配给新列之前,您需要以正确的方式形成列表。您可以尝试使用以下设置新列:
df['sum'], df['prod'], df['quot'] = zip(*map(sum_prod_quot, df['a'], df['b'], df['c']))
有关详细信息,请点击链接
问题内容: 我如何使用JPA条件API执行以下操作: 使用CriteriaBuilder.countDistinct在一个列/路径上执行此操作很简单,但是如何在两个路径/列上执行此操作? 问题答案: 这是一个较晚的答案:-)尽管我不确定情况是否有所改变。 最近,我遇到了非常相同的需求,并使用concat解决了该需求,即通过将列连接为 伪列 ,然后将其连接到 伪列 上。 但是我不能使用,因为它生成了
我有一个数据框架,我想从其中一列的列表中创建5列 示例: 请注意,这里很少有列表少于5列,对于这些列,请在该位置插入NAN。
例如,假设我有一个 我有条件: 我如何测试条件并为我的df的每一行返回一个结果,如下面所示? 编辑:理想情况下,我想创建一个,允许我 并计算所有行的数据。因为在实际数据中,有100个条件语句和10个列。
例如3x^4-17x^2-3x+5。多项式的每个项可以表示为一对整数(系数、指数)。然后,多项式本身是这样的对的列表,如 所示。 零多项式0表示为空列表,因为它没有具有非零系数的项。 我想写两个函数,用元组(系数、指数)的相同表示形式对两个输入多项式进行相加和相乘: null > 应该给出 应该给出 应该给出 这里有一些东西,我开始了,但完全被打动了!
问题内容: 我是使用DataFrame的新手,我想知道如何在一系列表的多个列上执行等效于左外部联接的SQL 例: 本质上,我想做类似以下SQL代码的操作(注意df3在Year上没有加入): 结果应如下所示: 我曾尝试使用合并和联接,但无法弄清楚如何在多个表上以及涉及多个联接时执行此操作。有人可以帮我吗? 谢谢 问题答案: 合并他们在两个步骤,和第一,然后那到结果。 我从df3删除了year,因为您
问题内容: 我编写了一个脚本,该脚本在用户每次登录我们域中的计算机时运行。此脚本记录用户以及他们登录的计算机。任意数量的用户可以登录任意数量的计算机。 我只是从一个不在的顾问那里继承了这个IT环境,并且正在编写这个小查询,因此当接到用户的呼叫时,我可以按该用户的名字进行搜索,并合理地预测该用户正在使用的计算机。他们登录到任何给定计算机的次数。 这是“登录”表中数据的示例: 我要敲定的逻辑是跨多个列