如何将lambda函数应用于pandas数据框中的某些行并创建新列

时间:2018-07-31 00:22:53

标签: python pandas

我有以下数据框: df1

nameID  value1  Value2  Value3
name1   10      20      30
name2   15      25      35
name3   7       8       9
name4   5       6       7

我想创建一个新列result,以便如果nameID['name1,'name3]中,则result = value1 * value2。否则,result = value1* value3。我想使用lambda函数。

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

3 个答案:

答案 0 :(得分:3)

通过使用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)

答案 1 :(得分:1)

绝对使用np.where(@ Wen的答案)。

只需回答您的问题,lambda函数将采用以下格式:

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

答案 2 :(得分:0)

以下代码将在数据框中创建一个新的结果列

df['result'] = np.where(df.nameID.isin(['name1','name3']), df['value1'] * df['value2'], df['value1'] * df['value3'])

输出:

Result
200
525
56
35