pandas if else 条件多列[重复]

2023-11-23

假设我有以下 df:

import pandas as pd

data_dic = {
    "a": [0,0,1,2],
    "b": [0,3,4,5],
    "c": [6,7,8,9]
}
df = pd.DataFrame(data_dic)

Result:

   a  b  c
0  0  0  6
1  0  3  7
2  1  4  8
3  2  5  9

我需要根据条件将上述列中的值传递到新列:

if df.a > 0 then value df.a
else if df.b > 0 then value df.b 
else value df.c

现在我尝试:

df['value'] = [x if x > 0 else 'ww' for x in df['a']]

但不知道如何在此输入更多条件。

预期结果:

   a  b  c value
0  0  0  6  6
1  0  3  7  3
2  1  4  8  1
3  2  5  9  2

感谢您的辛勤工作。


Use numpy.select:

df['value'] = np.select([df.a > 0 , df.b > 0], [df.a, df.b], default=df.c)
print (df)
   a  b  c  value
0  0  0  6      6
1  0  3  7      3
2  1  4  8      1
3  2  5  9      2

400k 行中矢量化解决方案和循环解决方案之间的差异:

df = pd.concat([df] * 100000, ignore_index=True)

In [158]: %timeit df['value2'] = np.select([df.a > 0 , df.b > 0], [df.a, df.b], default=df.c)
9.86 ms ± 611 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [159]: %timeit df['value1'] = [x if x > 0 else y if y>0 else z for x,y,z in zip(df['a'],df['b'],df['c'])]
399 ms ± 52.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas if else 条件多列[重复] 的相关文章

随机推荐

  • 在 Google BigQuery 中创建 UUID 列

    谷歌大查询不支持UUID作为数据类型 那么 哪个选项更好地存储它 STRING 格式为 8 4 4 4 12 的字符串 BYTES 16字节 128位 的数组 编辑 BigQuery 现在支持函数称为GENERATE UUID 这会返回一个
  • Streamwriter 与 StringBuilder

    哪一种效果更好或更正确 是不是更好地创建一个对象StreamWriter类并在方法中频繁使用它并最终处理它 还是使用来自的对象更好StringBuilder然后从中创建一个对象StreamWriter并立即处置 1 var Write ne
  • 无法使用 Ctrl-C 终止 Python 脚本

    我正在使用以下脚本测试 Python 线程 import threading class FirstThread threading Thread def run self while True print first class Seco
  • JavaScript 中的解构赋值

    正如在 JavaScript 1 7 的 Mozilla 变更日志中可以看到的 他们添加了解构赋值 遗憾的是我不太喜欢这种语法 为什么要写两次 a 和 b var a b a b f 像这样的事情会好得多 var a b f 那仍然是向后兼
  • 用于检测模板特化的模板元函数

    灵感来自这个问题 我想知道是否可以引入一些编译时检查来检测是否有两个给定的模板实例化 template
  • 如何在 sails.js 中配置 https

    我正在尝试设置本地 HTTPS 服务器以在 Sails js 中进行测试 我无法找到任何指针如何在 sails js 中执行此操作 对于快递来说 var express require express var https require h
  • 如何在Python中将函数作为函数参数传递

    这是我目前拥有的并且运行良好 def iterate seed num x seed orbit x for i in range num x 2 x 1 x orbit append x return orbit 现在 如果我想将第 5
  • 如何创建一个可以固定行和列滚动的自定义控件?

    我试图弄清楚如何制作一个自定义控件 使用户可以向各个方向滚动 但具有固定的行和列 网格不适合我想要做的事情 因为它逐列滚动 我需要水平滚动逐像素平滑 我没有使用列 只有视觉网格线 垂直滚动不仅应该滚动右侧的区域 还应该滚动左侧的固定区域 与
  • Git - 不包括 {} 的颜色词

    我使用 git 和 color words 来查看我的差异 在我的差异中 它表明我删除了 b ljcount b nbsp nbsp nbsp Changes 我补充说 b skills limits b nbsp nbsp nbsp Ch
  • 避免 C/C++ 中内存泄漏的方法

    我可以使用哪些技巧来避免应用程序中的内存泄漏 在我当前的项目中 我使用一个工具 INSURE 来查找内存泄漏并生成报告 除了该工具之外 还有任何方法可以识别内存泄漏并克服它 有三种主要方法可以做到这一点 第一个是不会造成内存泄漏首先 防御性
  • AFL 警告:最后一个新路径:还没有(奇怪,请检查语法!)

    我有这个警告 最后一个新路径 还没有 奇怪 检查语法 在我尝试模糊文件后呈红色 我不知道为什么会发生这种情况 我用谷歌搜索也没有答案 我的命令是这样的 afl fuzz i testcases o findings tcpdump 4 6
  • 测试中模拟 EJB 注入

    每当我想测试一个使用资源注入的类时 我最终都会包含一个仅在测试中使用的构造函数 public class A EJB B b Used in tests to inject EJB mock protected A B b this b b
  • SFTP 路径格式与本地路径格式

    我正在编写一些 Java 代码 使用 JSch 库 通过 SFTP 到远程 Windows 计算机 并将文件复制到我的本地 Windows 文件夹 当指定远程计算机上的文件路径时 我被迫以以下格式指定路径 C temp myfile txt
  • Android MediaPlayer:基于 URI 播放 Raw 音频资源

    我试图解决的问题是在一个需要播放音频文件的活动中 大多数文件将由用户创建 并保存到外部存储中 因此使用以下代码播放 基于 Google 的示例代码 MediaPlayer mPlayer new MediaPlayer mPlayer se
  • python manage.py runserver、shell、dbshel​​l 在 git-bash 上冻结

    我试图在 Windows 的 git bash 上的 python virtualenv 中运行交互式 shell 但它没有运行 奇怪的是 它似乎没有做任何事情 只是光标在下一行上闪烁 没有给出任何输出 python manage py s
  • 如何在 EPPlus 中将数据透视表报表布局设置为表格?

    查看 EPPlus 附带的示例 我已成功创建数据透视表 但无法为其设置正确的报告布局 我希望它是 表格 而不是 轮廓 或其他什么 对我来说 EPPlus 现在似乎不支持这一点 但也许我错过了一些东西 事实证明 这比我想象的要容易得多 通过将
  • Android WebView:按钮响应非常滞后

    我制作了一个小网络应用程序来使用 Android 的 WebView 功能 我有一些用作按钮的 div 带有onclick属性 尝试该应用程序后 在设备的浏览器中 我立即注意到点击按钮后有很大的延迟 当我点击按钮和浏览器在其周围显示橙色突出
  • Python:停止正在等待用户输入的线程

    我试图让我的脚本在用户按下返回键时触发用户输入 然后主程序将检查 txUpdated 标志并使用该输入 我有一个在 python 中运行的线程 它只是等待用户输入 class InputThread threading Thread def
  • Eclipse IDE 支持 JSF 2.0 吗?

    我安装了 WTP 3 1 插件 还安装了 Glassfish v3 插件 我可以注册我的服务器 当我创建动态 Web 项目时 我可以看到可用的最大动态 Web 模块版本是 2 5 然后 我选择 Glassfish v3 的默认配置 但是当我
  • pandas if else 条件多列[重复]

    这个问题在这里已经有答案了 假设我有以下 df import pandas as pd data dic a 0 0 1 2 b 0 3 4 5 c 6 7 8 9 df pd DataFrame data dic Result a b c