YOB*_*OBA 3 python dataframe python-2.7 pandas
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
假设我dataframe喜欢这样:
df = pd.DataFrame({"a":range(4),"b":range(1,5)})
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:
a b
0 0 1
1 1 2
2 2 3
3 3 4
Run Code Online (Sandbox Code Playgroud)
以及将X乘以Y的函数:
def XtimesY(x,y):
return x*y
Run Code Online (Sandbox Code Playgroud)
如果我想添加一个新的熊猫系列,我可以这样做:
df["c"] =df.apply( lambda x:XtimesY(x["a"],2), axis =1)
Run Code Online (Sandbox Code Playgroud)
有用 !
现在我要添加多个系列:
我有这个功能:
def divideAndMultiply(x,y):
return x/y, x*y
Run Code Online (Sandbox Code Playgroud)
像这样的东西?:
df["e"], df["f"] = df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1)
Run Code Online (Sandbox Code Playgroud)
它不起作用!
我希望'e'列接收分区并将'f'乘法列列出来!
注意:这不是我正在使用的代码,但我期待相同的行为.
Sam*_*Sam 15
差不多了.使用zip*解压缩该功能.试试这个:
def divideAndMultiply(x,y):
return x/y, x*y
df["e"], df["f"] = zip(*df.a.apply(lambda val: divideAndMultiply(val,2)))
Run Code Online (Sandbox Code Playgroud)
UPDATE
针对版本0.23进行
result_type='broadcast'了更新 - 有关详细信息,请参阅文档
像这样重新定义你的函数:
def divideAndMultiply(x,y):
return [x/y, x*y]
Run Code Online (Sandbox Code Playgroud)
然后这样做:
df[['e','f']] = df.apply(lambda x: divideAndMultiply(x["a"], 2), axis=1, result_type='broadcast')
Run Code Online (Sandbox Code Playgroud)
你将获得所需的结果:
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
Run Code Online (Sandbox Code Playgroud)