I have a data set, df, with two variables, x and y. I want to write a function that does the following:
x if x>100 and y<50 else y
I am used to doing data analysis in STATA so I'm relatively new to pandas for data analysis. If it helps, in stata it would look like:
replace x = cond(x>100 & y<50, x, y)
In other words, the function is conditional on two columns in df and will return a value from one variable or the other in each row depending on whether the condition is met.
So far I have been creating new variables through new functions like:
df.dummyVar = df.x.apply(lambda x: 1 if x>100 else 0)
Using StackOverflow and the documentation I have only been able to find how to apply a function dependent on a single variable to more than one column (using the axis option). Please help.
Use where
:
df['dummyVar '] = df['x'].where((df['x'] > 100) & (df['y'] < 50), df['y'])
This will be much faster than performing an apply operation as it is vectorised.
Like this:
f = lambda x, y: x if x>100 and y<50 else y
Lambda(s) in Python are equivalent to a normal function definition.
def f(x, y):
return x if x>100 and y<50 else y
NB: The body of a Lambda must be a valid expression. This means you cannot use things like: return
for example; a Lambda will return the last expression evaluated.
For some good reading see:
There's now an pretty easy way to do this. Just use apply on the dataset:
df['dummy'] = df.apply(lambda row: row['x'] if row['x'] > 100 and row['y'] < 50 else row['y'])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With