gpt4 book ai didi

python - 将值更改为 pandas 中另一列的相应值

转载 作者:行者123 更新时间:2023-11-30 22:20:33 27 4
gpt4 key购买 nike

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

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

我想将 col3 的值 1 更改为 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)

上面以某种方式给出了错误

有人知道如何用 pandas 做到这一点吗?

最佳答案

用途:

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

或者:

df.col3 = df.col3.mask(df.col3 == 1, df.col2)
#df.col3 = df.col3.where(df.col3 != 1, df.col2)
#df.col3 = np.where(df.col3 == 1, df.col2, df.col3)

print (df)
col1 col2 col3
0 a d 0
1 b e e
2 c f 0
3 x t t

编辑:

使用 apply + lambda 的较慢解决方案:

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

关于python - 将值更改为 pandas 中另一列的相应值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com