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

函数返回两个新列

越涵衍
2023-03-14

我有一个pandasdataframe,我想在其上使用apply函数根据现有数据生成两个新列。我收到此错误:ValueError:传递的项目数错误2,放置意味着1

import pandas as pd
import numpy as np

def myfunc1(row):
    C = row['A'] + 10
    D = row['A'] + 50
    return [C, D]

df = pd.DataFrame(np.random.randint(0,10,size=(2, 2)), columns=list('AB'))

df['C', 'D'] = df.apply(myfunc1 ,axis=1)

启动DF:

   A  B
0  6  1
1  8  4

希望DF:

   A  B  C   D
0  6  1  16  56
1  8  4  18  58

共有3个答案

颛孙哲
2023-03-14

df['C','D']被认为是1列而不是2列。所以对于2列,你需要一个切片数据框,所以使用df[['C','D']

df[['C', 'D']] = df.apply(myfunc1 ,axis=1)

    A  B   C   D
0  4  6  14  54
1  5  1  15  55

或者您可以使用链分配,即

df['C'], df['D'] = df.apply(myfunc1 ,axis=1)
幸弘光
2023-03-14

请注意被接受答案的巨大内存消耗和低速度:https://ys-l.github.io/posts/2015/08/28/how-not-to-use-pandas-apply/ !

根据此处提出的建议,正确答案如下:

def run_loopy(df):
    Cs, Ds = [], []
    for _, row in df.iterrows():
        c, d, = myfunc1(row['A'])
        Cs.append(c)
        Ds.append(d)
    return pd.Series({'C': Cs,
                      'D': Ds})

def myfunc1(a):
    c = a + 10
    d = a + 50
    return c, d

df[['C', 'D']] = run_loopy(df)
靳睿
2023-03-14

根据最新的错误,可以通过将新列作为序列返回来避免错误

def myfunc1(row):
    C = row['A'] + 10
    D = row['A'] + 50
    return pd.Series([C, D])

df[['C', 'D']] = df.apply(myfunc1 ,axis=1)
 类似资料:
  • 本文向大家介绍PHP 如何从函数返回两个值,包括了PHP 如何从函数返回两个值的使用技巧和注意事项,需要的朋友参考一下 无法明确返回两个变量,可以将它们放入列表/数组数据结构中并返回。 示例 输出结果 这将产生以下输出-

  • 问题内容: 我想在两个单独的变量中从函数返回两个值。例如: 我希望能够分别使用这些值。当我尝试使用时,它返回,这不是我想要的。 问题答案: 你不能返回两个值,但可以返回并在调用后解压缩它: 在线意味着创建一个元组。你也可以使用括号,例如,但是元组是用逗号创建的,因此括号不是必需的。但是,你可以使用parens来提高代码的可读性或将元组分成多行。这同样适用于。 如果要返回两个以上的值,请考虑使用命名

  • 问题内容: 考虑到内置的Python List方法,我遇到了问题。 在学习Python的过程中,我一直认为Python变量(就像任何值类变量一样)会返回它创建的新变量。 举个例子: 此列表更改器不返回新列表的主要问题是您随后无法再进行多个更改。假设我想要一个从0到5的列表,而没有2和3。突变体返回新变量应该能够做到这一点: 令人遗憾的是,这不可能。 现在,有没有一种方法可以像我在示例中一样在列表上

  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回

  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回

  • 在rust中,任何函数都有返回类型,当函数返回时,会返回一个该类型的值。我们先来看看main函数: fn main() { //statements } 之前有说过,函数的返回值类型是在参数列表后,加上箭头和类型来指定的。不过,一般我们看到的main函数的定义并没有这么做。这是因为main函数的返回值是(),在rust中,当一个函数返回()时,可以省略。main函数的完整形式如下: