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

Dataframe应用方法返回多个元素(系列)

邢博涛
2023-03-14
import pandas as pd

假设我有一个这样的dataframe

df = pd.DataFrame({"a":range(4),"b":range(1,5)})

看起来是这样的:

   a  b
0  0  1
1  1  2
2  2  3
3  3  4

和一个X乘以Y的函数:

def XtimesY(x,y):
    return x*y

如果我想添加一个新的熊猫系列到df我可以做:

df["c"] =df.apply( lambda x:XtimesY(x["a"],2), axis =1)

它起作用了!

现在我想添加多个系列:

我有这个功能:

def divideAndMultiply(x,y):
    return x/y, x*y

像这样的东西?:

df["e"], df["f"] = df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1)

它不工作!

我希望'e'列接收除法,'f'列接收乘法!

注意:这不是我正在使用的代码,但我期待相同的行为。

共有3个答案

白才艺
2023-03-14
df["e"], df["f"] = zip(*df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1))

我们应该做到这一点。

(我展示了这个例子,以便您可以看到如何使用多个列作为输入来创建多个新列)

万俟招
2023-03-14

使现代化

更新版本0.23-使用result\u type='broadcast'有关更多详细信息,请参阅文档

重新定义函数,如下所示:

def divideAndMultiply(x,y):
    return [x/y, x*y]

然后这样做:

df[['e','f']] = df.apply(lambda x: divideAndMultiply(x["a"], 2), axis=1, result_type='broadcast')

您将获得期望的结果:

In [118]: df
Out[118]:
   a  b  e  f
0  0  1  0  0
1  1  2  0  2
2  2  3  1  4
3  3  4  1  6
司寇凯
2023-03-14

快到了。使用zip*解压函数。试试这个:

def divideAndMultiply(x,y):
    return x/y, x*y

df["e"], df["f"] = zip(*df.a.apply(lambda val: divideAndMultiply(val,2)))
 类似资料:
  • 问题内容: 我是新手,遇到此问题: 当我这样渲染时,它会给我错误提示 我应该为每个html标签或每一行创建一个componenet,还是可以以这种方式呈现。 有什么建议吗? 问题答案: 在React <v16.0中,该方法只能呈现单个根节点。( 更新: 这在v16中已更改,请参见下文)。就您而言,您将返回3个节点。为了解决这个问题,您可以将3个节点包装在一个根节点中: 在React v16中,可以

  • 假设我有一个Employee类,它具有正确重写的equals和hashcode方法。 测试类如下所示 上述程序的输出为: 员工[ENO=1,FirstName=Karan,LastName=Mehara] 为什么distinct()方法返回重复的元素? 根据employee类的equals()和hashcode()方法,这两个对象是相同的。

  • 问题内容: 由于发送给Java方法的参数指向调用方方法中的原始数据结构,因此它的设计者是否打算像其他语言(如C)那样使用它们来返回多个值? 还是这是对Java通用属性(变量是指针)的危险滥用? 问题答案: 很久以前,我与Ken Arnold(Java团队的一名成员)进行了一次对话,大概是在1996年的第一次Java One会议上。他说他们正在考虑添加多个返回值,以便您可以写类似: 当时和现在的推荐

  • 问题内容: 我正在尝试转换DataFrame,以便将某些行复制给定的次数。例如: 应该转换为: 这与使用count函数进行聚合相反。有没有一种简单的方法可以在熊猫中实现(不使用for循环或列表推导)? 一种可能是允许函数返回多行(的类似方法)。但是,我认为现在在大熊猫中是不可能的。 问题答案: 您可以使用groupby: 所以你得到 您可以根据需要固定结果的索引

  • 这工作正常: 我得到了一个非常好的JSON数组和对象。 现在的问题是,我喜欢将我的数据作为有效载荷放入响应中,以便能够设置标头和状态,或者返回一个错误对象作为有效载荷。但是不管用。 Mai 16,2012 7:00:35 PMorg.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor写响应错误消息警告:未找到响应类ArrayList的消息正文编写器。