[英]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
: 我有以下数据框:
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
. 我想创建一个新的列
result
,以便如果nameID
在['name1,'name3]
则result = value1 * value2
。 Otherwise, result = value1* value3
. 否则,
result = value1* value3
。 I would like to use lambda functions. 我想使用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
By using np.where
通过使用
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). 绝对使用
np.where
(@Wen的答案)。
Just to answer your question, a lambda func would take this format: 为了回答您的问题,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
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.