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'
列接收乘法!
注意:这不是我正在使用的代码,但我期待相同的行为。
df["e"], df["f"] = zip(*df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1))
我们应该做到这一点。
(我展示了这个例子,以便您可以看到如何使用多个列作为输入来创建多个新列)
使现代化
更新版本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
快到了。使用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的消息正文编写器。