[英]How to apply a lambda function to certain rows in a data frame in pandas and create a new column
我有以下數據框: 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
通過使用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)
絕對使用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
以下代碼將在數據框中創建一個新的結果列
df['result'] = np.where(df.nameID.isin(['name1','name3']), df['value1'] * df['value2'], df['value1'] * df['value3'])
輸出:
Result
200
525
56
35
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.