当前位置: 首页 > 知识库问答 >
问题:

从返回dict的函数创建多个列

司寇凯
2023-03-14

我有一个返回dict对象的函数,我想利用pandas/numpy在数据帧的每一行上为该函数执行列操作/向量化的能力。函数的输入在dataframe中指定,我希望函数的输出成为现有dataframe上的新列。下面是一个例子。

def func(a, b, c):
    return {
        "a_calc": a * 2, 
        "b_calc": b * 3, 
        "c_calc": c * 4
    }
df = pd.DataFrame([{"a":1, "b":2, "c": 3}, {"a": 4, "b": 5, "c": 6}])
   a  b  c
0  1  2  3
1  4  5  6

期望输出:

   a  b  c  a_calc  b_calc  c_calc
0  1  2  3       2       6      12
1  4  5  6       8      15      24

我读了这个答案,大部分内容都是这样的,但是当函数返回一个dict对象,其中包含所需的列名作为dict中的键时,我不太明白该怎么做。

共有2个答案

卢黎昕
2023-03-14

如果你不能修改你的函数,你可以做:

df.join(pd.DataFrame(func(df['a'], df['b'],df['c']), index=df.index))

输出:

   a  b  c  a_calc  b_calc  c_calc
0  1  2  3       2       6      12
1  4  5  6       8      15      24

注意:我们利用了func可以接受串行输入并并行工作的事实。在一般情况下,对于循环,您需要一个

pd.DataFrame([func(x['a'], x['b'], x['c']) for _, x in df.iterrows()],
              index=df.index)

孔扬
2023-03-14

让我们使用一些数据帧解包:

df.join(pd.DataFrame(func(**df)))

输出:

   a  b  c  a_calc  b_calc  c_calc
0  1  2  3       2       6      12
1  4  5  6       8      15      24

或者真的变得可爱:

df.assign(**func(**df))
 类似资料:
  • 问题内容: 如何快速从函数返回3个相同类型(Int)的单独数据值? 我试图返回一天中的时间,我需要将小时,分钟和秒作为单独的整数返回,但是所有这些都来自同一个函数,这可能吗? 我想我只是不了解返回多个值的语法。这是我正在使用的代码,我在last(return)行上遇到了麻烦。 任何帮助将不胜感激! 问题答案: 返回一个元组: 然后将其调用为: 要么:

  • 问题内容: 我最近开始与React合作,但遇到了一些问题。 目前我有以下代码 这是我的职责。 但是,我只用很小的改动就将同一段代码复制/粘贴了5次以上。我希望将其提取为一个函数,但是我不确定该怎么做。 我应该在哪里放置函数?-在render()方法里面? 我应该从中得到什么?-一个字符串,其中包含html和{}占位符中的变量? 我可以简单地在html中调用它吗? 问题答案: 创建这样的功能: 像这

  • 问题内容: 选项:使用元组 考虑下面这个简单的例子: 但是,随着返回值的数量增加,这很快就会成为问题。如果要返回四个或五个值怎么办?当然,你可以继续修改它们,但是很容易忘记哪个值在哪里。在任何想要接收它们的地方打开它们的包装也是很丑陋的。 选项:使用字典 下一步的逻辑步骤似乎是引入某种“记录符号”。在Python中,一种明显的方法是使用dict。 考虑以下: (请注意,y0,y1和y2只是抽象标识

  • 我试图使一个函数,对于一个整数序列作为一个数组,可以确定是否可以通过从数组中移除不超过一个元素来获得严格递增的序列。如果可以移除某个元素,则输出为True,否则返回false。我试过了, 它适用于列表, 因为你不能删除任何会导致递增序列的数字。但是,如果列表是 这是真的,因为你可以删除2或3有一个递增的序列。但是,我的函数错误地输出False。

  • 问题 你希望构造一个可以返回多个值的函数 解决方案 为了能返回多个值,函数直接return一个元组就行了。例如: >>> def myfun(): ... return 1, 2, 3 ... >>> a, b, c = myfun() >>> a 1 >>> b 2 >>> c 3 讨论 尽管myfun()看上去返回了多个值,实际上是先创建了一个元组然后返回的。 这个语法看上去比较奇怪,实际上我

  • 问题内容: 是否有可能具有两个返回的函数,如下所示: 如果是这样,我如何才能分别获得每份退货? 问题答案: 无法返回两个变量。虽然,您 可以 传播一个数组并返回它;创建条件以返回动态变量,等等。 例如,此函数将返回 在应用中: 如果您都想要它们,可以稍微修改一下功能