我有以下数据框:
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
答案 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