Python 将值从表中的另一列更改为相应的值

Python 将值从表中的另一列更改为相应的值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个如下所示的数据框 col1 col2 col3 0 a d 0 1 b e 1 2 c f 0 3 x t 1 ................. 我想将值为1的col3更改为col2中相应的值 结果将是 col1 col2 col3 0 a d 0 1 b e e 2 c f 0 3 x t t ...............

我有一个如下所示的数据框

     col1 col2 col3
0   a     d    0
1   b     e    1
2   c     f    0
3   x     t    1
.................
我想将值为1的col3更改为col2中相应的值

结果将是

   col1 col2 col3
0   a     d    0
1   b     e    e
2   c     f    0
3   x     t    t
.................

df[['col1','col2','col3']].applymap(lambda x: df['col2'] if x==1 else x)
上面这句话多少有些错误

有人知道如何处理熊猫吗

使用:

df.loc[df.col3 == 1, 'col3'] = df.col2
或:

编辑:

具有
应用+lambda的Slowier解决方案

df = df.apply(lambda x: x['col2'] if x['col3']==1 else x, axis=1)
计时

#[40000 rows x 3 columns]
df = pd.concat([df] * 10000, ignore_index=True)

In [42]: %timeit df.col3 = np.where(df.col3 == 1, df.col2, df.col3)
100 loops, best of 3: 3.97 ms per loop

In [43]: %timeit df.loc[df.col3 == 1, 'col3'] = df.col2
100 loops, best of 3: 6.81 ms per loop

In [44]: %timeit df.col3 = df.col3.mask(df.col3 == 1, df.col2)
100 loops, best of 3: 4.95 ms per loop

In [45]: %timeit df.col3 = df.col3.where(df.col3 != 1, df.col2)
100 loops, best of 3: 4.8 ms per loop

In [47]: %timeit df.apply(lambda x: x['col2'] if x['col3']==1 else x, axis=1)
1 loop, best of 3: 3.39 s per loop

你得到了什么错误?TypeError:(“'int'对象不可下标”,“在索引值处发生”)谢谢你,测试过的工作,如果我必须使用lambda怎么办?是的,这是可能的,但我想是slowier。给我一点时间。@ikel-我在我的答案中添加了比较解决方案的时间。
#[40000 rows x 3 columns]
df = pd.concat([df] * 10000, ignore_index=True)

In [42]: %timeit df.col3 = np.where(df.col3 == 1, df.col2, df.col3)
100 loops, best of 3: 3.97 ms per loop

In [43]: %timeit df.loc[df.col3 == 1, 'col3'] = df.col2
100 loops, best of 3: 6.81 ms per loop

In [44]: %timeit df.col3 = df.col3.mask(df.col3 == 1, df.col2)
100 loops, best of 3: 4.95 ms per loop

In [45]: %timeit df.col3 = df.col3.where(df.col3 != 1, df.col2)
100 loops, best of 3: 4.8 ms per loop

In [47]: %timeit df.apply(lambda x: x['col2'] if x['col3']==1 else x, axis=1)
1 loop, best of 3: 3.39 s per loop