使用if语句在pandas中创建新列

时间:2019-11-07 00:22:18

标签: python-3.x pandas

我正在尝试使用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。

2 个答案:

答案 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)