简体   繁体   中英

How to apply a lambda function to certain rows in a data frame in pandas and create a new column

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

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)

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM