我正在尝试使用if语句在pandas中创建一个新列。我有这个df:
df = {'Col1': [7,6,-9],
'Col2': [0.5,0.5,0.5],
'Col3': [5,4,3]}
如果Col1
大于0,那么我想将Col2
乘以Col3
来创建新列Col4
。如果Col1
不大于0,那么我只想返回0作为列值。
这是我尝试过的:
df['Col4'] = if df['Col1'] > 0:
df['Col2'] * df['Col3']
else:
0
我收到错误消息:“ SyntaxError:语法无效”
最终答案应如下所示:
df = {'Col1': [7,6,-9],
'Col2': [0.5,0.5,0.5],
'Col3': [5,4,3],
'Col4': [2.5,2,0]}
请注意,因为在Col1
中,“-9”不大于0,所以Col4
应该给出0。
答案 0 :(得分:2)
我会使用np.where
:
>>> df['Col4'] = np.where(df['Col1'] > 0, df['Col2'] * df['Col3'], 0)
>>> df
Col1 Col2 Col3 Col4
0 7 0.5 5 2.5
1 6 0.5 4 2.0
2 -9 0.5 3 0.0
基本上,其中 df['Col1']
大于零,Col4
中的对应元素将为df['Col2'] * df['Col3']
。否则,它将为零。
还有一个pd.DataFrame.where
,我觉得它有点笨拙:
>>> df['Col4'] = (df['Col2'] * df['Col3']).where(df['Col1'] > 0, 0)
有关详细信息,您可以查看this answer。
答案 1 :(得分:1)
您的语法无效。我认为这更接近您想要的:
[20191107 - @#$%^& This is a section - 20191107](tips.tech.git.md#20191107----this-is-a-section---20191107)
输出:
import pandas as pd
df = pd.DataFrame({'Col1': [7, 6, -9],
'Col2': [0.5, 0.5, 0.5],
'Col3': [5, 4, 3]})
print(df)
print()
def product(row):
if row['Col1'] > 0:
return row['Col2'] * row['Col3']
else:
return 0
df['Col4'] = df.apply(product, axis=1)
print(df)