python - python pandas 以优雅的方式按条件逐行替换
问题描述
我有以下问题:
例如,给定一个数据框,
import pandas as pd
df = pd.DataFrame({'col1':[1,0,0,1],'col2':['B','B','A','A'],'col3':[1,2,3,4]})
在其他一些工具中,我可以轻松地根据条件创建一个新列,比如
如果 df['col1'] == '0' & ~df['col2'].isnull() else 'col1' 则使用 'col2' 创建新列 'col3'
这个其他工具的工作速度非常快。到目前为止我在python中没有找到对应的表达式。
1.)我尝试了 np.where 迭代行但不允许在结果中与确切行相对应的动态值
2.) 我试过 .apply(lambda ... ) ,这似乎很慢。
如果你能找到一种优雅的方法来解决这个问题,我会很高兴。谢谢。
解决方案
我认为需要倒置numpy.where
(感谢@jpp):notnull
isnull
df = pd.DataFrame({'col1':[1,0,0,1],'col2':['B','B','A','A'],'col3':[1,2,3,4]})
df['col3'] = np.where((df['col1'] == 0) & (df['col2'].notnull()), df['col2'], df['col1'])
print (df)
col1 col2 col3
0 1 B 1
1 0 B B
2 0 A A
3 1 A 1
推荐阅读
- php - Wordpress NGINX Plesk 重写规则 + 重写特定文件夹
- xpath - 从 beautifulsoup 切换到 htmlelement - 如何查找元素
- php - 父类不使用flock函数锁定文件
- options - Cplex 仅在根处切割
- html - 仅 CSS / 在选中的单选按钮上显示多个 div
- css - 关于在 CSS url() 中使用数据 URI 的有效性的说明
- memory - WildFly 17.0.1.Final 堆内存问题
- snmp - 扩展的 snmp 代理如何通过 shell 或 python 读取文本文件?授予我读取文件错误的权限被拒绝
- c# - On After Render a Modal razor 组件启动 JavaScript
- python - 使用 OpenCV 输出特定的视频区域