import pandas as pd
Let's say I have a dataframe like so:
df = pd.DataFrame({"a":range(4),"b":range(1,5)})
it looks like this:
a b
0 0 1
1 1 2
2 2 3
3 3 4
and a function that multiplies X by Y:
def XtimesY(x,y):
return x*y
If I want to add a new pandas series to df I can do:
df["c"] =df.apply( lambda x:XtimesY(x["a"],2), axis =1)
It works !
Now I want to add multiple series:
I have this function:
def divideAndMultiply(x,y):
return x/y, x*y
something like this ?:
df["e"], df["f"] = df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1)
It doesn't work !
I want the 'e' column to receive the divisions and 'f' column the multiplications !
Note: This is not the code I'm using but I'm expecting the same behavior.
解决方案
UPDATE
Updated for version 0.23 - using result_type='broadcast' for further details refer to documentation
Redefine your function like this:
def divideAndMultiply(x,y):
return [x/y, x*y]
Then do this:
df[['e','f']] = df.apply(lambda x: divideAndMultiply(x["a"], 2), axis=1, result_type='broadcast')
You shall get the desired result:
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