Reputation: 163
I have the following data frame:
df1
:
nameID value1 Value2 Value3
name1 10 20 30
name2 15 25 35
name3 7 8 9
name4 5 6 7
I want to create a new column result
such that if nameID
is in ['name1,'name3]
then result = value1 * value2
. Otherwise, result = value1* value3
. I would like to use lambda functions.
nameID value1 Value2 Value3 result
name1 10 20 30 200
name2 15 25 35 525
name3 7 8 9 56
name4 5 6 7 35
Upvotes: 2
Views: 1070
Reputation: 106
The following code will create a new result column in the Dataframe
df['result'] = np.where(df.nameID.isin(['name1','name3']), df['value1'] * df['value2'], df['value1'] * df['value3'])
Output:
Result
200
525
56
35
Upvotes: 0
Reputation: 59274
Definitely use np.where
(@Wen`s answer).
Just to answer your question, a lambda func would take this format:
df.apply(lambda k: k['value1']*k['value2'] if k['nameID'] in (['name1', 'name3']) else k['value1']*k['value3'], axis=1)
0 200
1 525
2 56
3 35
Upvotes: 1
Reputation: 323306
By using np.where
np.where(df['nameID'].isin(['name1','name3']),df1.value1*df1.Value2 ,df1.value1*df1.Value3)
Out[182]: array([200, 525, 56, 35], dtype=int64)
#df1['result'] = np.where(df['nameID'].isin(['name1','name3']),df1.value1*df1.Value2 ,df1.value1*df1.Value3)
Upvotes: 3