Python 2.7 条件更新数据帧值

Python 2.7 条件更新数据帧值,python-2.7,pandas,Python 2.7,Pandas,我有一个数据帧: col1 col2 col3 col4 1 1 20 AA NaN 2 2 10 BB NaN 3 3 20 CC NaN 4 1 30 AA NaN 5 2 10 BB NaN 我需要更新col4,以便: if col3 == 'AA': return

我有一个数据帧:

    col1    col2    col3    col4
1     1      20      AA      NaN
2     2      10      BB      NaN
3     3      20      CC      NaN
4     1      30      AA      NaN
5     2      10      BB      NaN
我需要更新col4,以便:

if col3 == 'AA':
    return col2 + col1
elif col2 == 'BB':
    return col2 - col1
else:
    return
因此,输出将如下所示:

    col1    col2    col3    col4
1     1      20      AA      21
2     2      10      BB      8
3     3      20      CC      NaN
4     1      30      AA      31
5     2      10      BB      8
我试过:

df['col4'][df['col3']=='AA'] = df['col2'] + df['col1']
df['col4'][df['col3']=='AA'] = df['col2'] + df['col1']
当然,我得到了一个设置与copywarning

在没有警告的情况下,实现这一点的正确方法是什么?我已尝试应用并设置_值,但我似乎无法将这么多df引用传递到参数中。

您可以使用嵌套:

您可以使用嵌套的:

不寻常的模式:-)

不寻常的模式:-)


@Yeile,不客气。这是这种情况的常见模式tasks@Yeile,不客气。这是此类任务的常见模式。这是一个非常有创意的解决方案!;)@皮尔斯阻止了那次黑客攻击!这是一个非常有创意的解决方案!;)@皮尔斯阻止了那次黑客攻击!
In [5]: df['col4'] = np.where(df.col3 == 'AA',
                              df.col2 + df.col1,
                              np.where(df.col3 == 'BB',
                                       df.col2 - df.col1,
                                       np.nan))

In [6]: df
Out[6]:
   col1  col2 col3  col4
1     1    20   AA  21.0
2     2    10   BB   8.0
3     3    20   CC   NaN
4     1    30   AA  31.0
5     2    10   BB   8.0
a = ((df.col3.values[:, None] == ['AA', 'BB']) * [1, -1]).sum(1, keepdims=True)
b = np.hstack([np.ones_like(a), np.where(a == 0, np.nan, a)])
df.assign(col4=df[['col1', 'col2']].mul(b).sum(1, skipna=False))

   col1  col2 col3  col4
1     1    20   AA  21.0
2     2    10   BB  -8.0
3     3    20   CC   NaN
4     1    30   AA  31.0
5     2    10   BB  -8.0