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