作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的数据框
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/
我在 Java 中遇到异常处理问题,这是我的代码。当我尝试运行此行时出现编译器错误:throw new MojException("Bledne dane");。错误是: exception MojE
我刚刚开始学习asp.net。在你们的支持下,我希望我能从这个论坛学到更多东西。 我的问题是, 我在 asp.net 页面中有一个 TabContainer1,因为每个选项卡面板中有多个类似 (60)
我是一名优秀的程序员,十分优秀!