根据 Pandas DataFrame 中的其他列值在列之间移动行值

2023-12-24

我有一个熊猫数据框,其中包含生物体名称及其抗生素敏感性列表。我希望根据以下规则将所有生物体合并到下面数据框中的一列中。

  1. 如果 ORG1 == A,则不执行任何操作;

  2. 如果 ORG1 != A 且 ORG2 == A,则将 ORG2 值移至 ORG1 列

  3. 如果 ORG1 != A 且 ORG3 == A,则将 ORG3 值移至 ORG1 列

如果满足条件 2,除了将 ORG2 值移动到 ORG1 列外,还将 AS20* 中的列值移动到 AS10* 中。

同样,如果满足条件 3,除了将 ORG3 值移至 ORG1 列外,还将 AS30* 中的列值移至 AS10* 中。

我自己尝试过根据上述规则编写一个函数,但基于以下规则取得了有限的成功:

If ORG2 == A:
       return ORG1.map(ORG2)

当我尝试根据条件顺序映射 AS201 -> AS101、AS202 -> AS102、AS203 -> AS103 等时,我迷路了。

我遇到的另一个问题是生物体名称不是单个字母,也不是漂亮的字母。示例中的 A 相当于re.match('aureus')在我的数据集中。

此外,每个 ORG 列有 20 个 AS 列,并且有超过 150,000 条记录,因此我希望能够将其推广到任意数量的抗生素敏感性结果。

我在这方面有点挣扎,所以朝正确的方向推几下确实会有帮助。

提前致谢。



Index   ORG1    ORG2    ORG3    AB1    AS101    AS201   AS301     AB2   AS102   AS202 AS302
1          A     NaN     NaN    pen        S      NaN     NaN   dfluc       S     NaN   NaN
2          A       B       C    pen        R        S       S   dfluc       S       R     S
3          B       A       B    pen        S        S       R   dfluc       S       S     R
4          A     NaN     NaN    pen        R      NaN     NaN   dfluc       S     NaN   NaN
5          A     NaN     NaN    pen        R      NaN     NaN   dfluc       S     NaN   NaN
6          C       A       A    pen        S        R       R   dfluc       R       S     R
7          B     NaN       A    pen        R      NaN       S   dfluc       S     NaN     S
8          A       B       A    pen        R        R       R   dfluc       R       R     R
9          A     NaN     NaN    pen        R      NaN     NaN   dfluc       S     NaN   NaN
  

我们可以选择行ORG1 != A and ORG2 == A with

mask = (df['ORG1'] != 'A')&(df[orgi] == 'A')

mask那么是一个布尔系列。要将值从 ORG2 复制到 ORG1,我们可以使用

df['ORG1'][mask] = df['ORG2'][mask]

或者,因为我们知道右边的值是A,我们可以使用

df['ORG1'][mask] = 'A'

复制 AS 列也可以类似地完成。


我们可以找到列值包含某些字符串的行,例如'aureus' with

df[orgi].str.contains('aureus') == True

str.contains可以采取任何正则表达式模式作为其参数。 请参阅文档:矢量化字符串方法 http://pandas.pydata.org/pandas-docs/stable/basics.html#vectorized-string-methods.

注意:通常使用就足够了df[orgi].str.contains('aureus')(没有== True, 但是由于df[orgi]可能包含NaN值,我们还需要映射NaNs 为 False,所以我们使用df[orgi].str.contains('aureus') == True.


import pandas as pd

filename = 'data.txt'
df = pd.read_table(filename, delimiter='\s+')
print(df)
#    Index ORG1 ORG2 ORG3  AB1 AS101 AS201 AS301    AB2 AS102 AS202 AS302
# 0      1    A  NaN  NaN  pen     S   NaN   NaN  dfluc     S   NaN   NaN
# 1      2    A    B    C  pen     R     S     S  dfluc     S     R     S
# 2      3    B    A    B  pen     S     S     R  dfluc     S     S     R
# 3      4    A  NaN  NaN  pen     R   NaN   NaN  dfluc     S   NaN   NaN
# 4      5    A  NaN  NaN  pen     R   NaN   NaN  dfluc     S   NaN   NaN
# 5      6    C    A    A  pen     S     R     R  dfluc     R     S     R
# 6      7    B  NaN    A  pen     R   NaN     S  dfluc     S   NaN     S
# 7      8    A    B    A  pen     R     R     R  dfluc     R     R     R
# 8      9    A  NaN  NaN  pen     R   NaN   NaN  dfluc     S   NaN   NaN

for i in range(2,4):
    orgi = 'ORG{i}'.format(i=i)
    # mask = (df['ORG1'] != 'A')&(df[orgi] == 'A')
    mask = (df['ORG1'].str.contains('A') == False)&(df[orgi].str.contains('A') == True)
    # Move ORGi --> ORG1
    df['ORG1'][mask] = df[orgi][mask]
    for j in range(1,4):
        # Move ASij --> AS1j
        source_as = 'AS{i}{j:02d}'.format(i=i, j=j)
        target_as = 'AS1{j:02d}'.format(i=i, j=j)
        try:
            df[target_as][mask] = df[source_as][mask]
        except KeyError:
            pass

print(df)

yields

   Index ORG1 ORG2 ORG3  AB1 AS101 AS201 AS301    AB2 AS102 AS202 AS302
0      1    A  NaN  NaN  pen     S   NaN   NaN  dfluc     S   NaN   NaN
1      2    A    B    C  pen     R     S     S  dfluc     S     R     S
2      3    A    A    B  pen     S     S     R  dfluc     S     S     R
3      4    A  NaN  NaN  pen     R   NaN   NaN  dfluc     S   NaN   NaN
4      5    A  NaN  NaN  pen     R   NaN   NaN  dfluc     S   NaN   NaN
5      6    A    A    A  pen     R     R     R  dfluc     S     S     R
6      7    A  NaN    A  pen     S   NaN     S  dfluc     S   NaN     S
7      8    A    B    A  pen     R     R     R  dfluc     R     R     R
8      9    A  NaN  NaN  pen     R   NaN   NaN  dfluc     S   NaN   NaN

请注意,如果ORG2 == A and ORG3 == A,然后是列中的值AS20* and AS30*两者都竞争覆盖列中的值AS10*。我不确定你想赢得哪个价值。在上面的代码中,last列获胜,这将是AS30*.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 Pandas DataFrame 中的其他列值在列之间移动行值 的相关文章

  • 嵌套函数中的变量作用域

    有人可以解释为什么以下程序失败 def g f for in range 10 f def main x 10 def f print x x x 1 g f if name main main 带有消息 Traceback most re
  • 如何使用 tkinter 使用网格功能显示不同的图像?

    我想使用显示文件夹中的图像grid 但是当我尝试使用以下代码时 我得到了迭代单个图像的输出 My code def messageWindow win Toplevel path C Users HP Desktop dataset for
  • 用于读取类似 CSV 行的 Python 正则表达式

    我想解析传入的类似 CSV 的数据行 值用逗号分隔 逗号周围可能有前导和尾随空格 并且可以用 或 引用 例如 这是有效的行 data1 data2 data3 data4 data5 但这是格式错误的 data1 data2 da ta3
  • 如何测试该变量不等于多个事物?

    这是我的一段代码 choice while choice 1 and choice 2 and choice 3 choice raw input pick 1 2 or 3 if choice 1 print 1 it is elif c
  • 如何同时有效地运行多个 Pytorch 进程/模型? Traceback:分页文件太小,无法完成此操作

    背景 我有一个非常小的网络 我想用不同的随机种子进行测试 该网络几乎只使用了我的 GPU 计算能力的 1 因此理论上我可以同时运行 50 个进程来同时尝试许多不同的种子 Problem 不幸的是我什至无法在多个进程中导入 pytorch 当
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • Python MySQLdb:connection.close() VS。光标.close()

    如果我使用MySQLdb通过Python连接到MySQL Server 我创建一个connection and a cursor像这样 connection MySQLdb connect cursor connection cursor
  • Python正则表达式替换引号中的文本(引号本身除外)

    例如 我有一个测试字符串 content I opened my mouth Good morning I said cheerfully 我想使用正则表达式删除双语音标记之间的文本 但不删除语音标记本身 所以它会返回 I opened m
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • python 硒 按名称查找元素

    查找电子邮件输入的正确代码是什么https accounts google com ServiceLogin html 是
  • 使用最新值进行采样

    考虑以下系列 created at 2014 01 27 21 50 05 040961 80000 00 2014 03 12 18 46 45 517968 79900 00 2014 09 05 20 54 17 991260 636
  • 在 Python 中引发异常的正确方法是什么? [复制]

    这个问题在这里已经有答案了 这是简单的代码 import sys class EmptyArgs StandardError pass if name main The first way to raise an exception if
  • 如何在 tkinter 后台运行函数[重复]

    这个问题在这里已经有答案了 我是 GUI 编程新手 我想用 tkinter 编写一个 Python 程序 我想要它做的就是在后台运行一个可以通过 GUI 影响的简单函数 该函数从 0 计数到无穷大 直到按下按钮为止 至少这是我想要它做的 但
  • 使用 Popen 打开进程并获取 PID

    我正在开发一个漂亮的小功能 def startProcess name path Starts a process in the background and writes a PID file returns integer pid Ch
  • 在 Keras 中使用有状态 LSTM 训练多变量多级数回归问题

    我有时间序列P过程 每个过程的长度各不相同 但都有 5 个变量 维度 我试图预测测试过程的估计寿命 我正在用有状态的方法来解决这个问题LSTM在喀拉斯 但我不确定我的训练过程是否正确 我将每个序列分成长度的批次30 所以每个序列都是这样的形
  • numpy 向量化而不是 for 循环

    我用 Python 写了一些代码 运行良好 但速度很慢 我认为是由于 for 循环 我希望可以使用 numpy 命令加速以下操作 让我定义目标 假设我有一个 2D numpy 数组all CMs尺寸row x col 例如考虑一个6x11数
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • 我应该在哪里对对象和字段进行 django 验证?

    我正在创建一个 Django 应用程序 它使用 Django Rest Framework 和普通的 django views 作为用户的入口点 我想对模型的独立字段以及整个对象进行验证 例如 字段 根据正则表达式函数输入的车牌是否正确 与
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • 如何将另一整列作为参数传递给 pandas fillna()

    我想用另一列中的值填充一列中的缺失值 使用fillna方法 我读到循环遍历每一行将是非常糟糕的做法 最好一次完成所有事情 但我不知道如何使用fillna 之前的数据 Day Cat1 Cat2 1 cat mouse 2 dog eleph

随机推荐

  • Twig 模板单元测试

    我开始考虑 Symfony 中 Twig 模板的持续集成 模板是独立的逻辑 模板中有错误 但在开发过程中我不想因为目视检查而分心 在 Symfony 中是否有任何现成的解决方案可以对 twig 文件进行单元测试 测试树枝模板中的语法错误 您
  • 如何限制 RAM 以测试内存不足的情况?

    我正在尝试重现当用户用完大量 RAM 时似乎出现的错误 限制计算机可以使用的可用 RAM 或填满大部分 RAM 的最佳方法是什么 我更愿意在不物理删除内存的情况下执行此操作 并且不运行一堆任意的内存密集型程序 即 Photoshop Qua
  • Asp.NET Core 2.1 HostedService - 继续在 Azure 上运行

    我们有一个使用 IHostedService 的 Web 应用程序 有一个这样的例子here https gist github com davidfowl a7dd5064d9dcf35b6eae1a7953d615e3 我们采用的方法是
  • 在 OS X 上初始化 D 运行时

    编辑 这似乎是一个长期存在的问题 没有迫在眉睫的解决方案 http d puremagic com issues show bug cgi id 8133 http d puremagic com issues show bug cgi i
  • Joda-Time:DateTime、DateMidnight 和 LocalDate 的使用

    乔达时间 http www joda org joda time 库包含不同的日期时间类 DateTime http www joda org joda time apidocs org joda time DateTime html 不可
  • 嵌入模式给出错误

    我试图将模式嵌入到我创建的其他模式中 但我不断收到此错误 我不完全确定这里出了什么问题 但我想要做的是将我的事件模式和兴趣模式的引用存储在用户模式内 如果有人能告诉我我做错了什么 那就太好了 谢谢 编辑 我现在收到一个新错误 Users D
  • Django:如何检查用户名是否已经存在?

    我不是 Django 的高级用户 我在网上看到了很多不同的方法 但它们都是针对修改模型的 或者太复杂 我无法理解 我正在重复使用UserCreationForm in my MyRegistrationForm class MyRegist
  • “this”关键字在 Nodejs 和浏览器中的行为不同

    我有这段代码 var obj1 var obj2 function x obj1 this function y obj2 this x y console log obj1 obj2 console log obj1 this 我使用命令
  • NSSavePanel 在沙箱应用程序后不保存文件

    我在保存字符串文件时遇到问题NSSavePanel将应用程序沙箱到 Mac App Store 后 我设置com apple security files user selected read write to YES和NSOpenPane
  • PHP:致命错误:调用非对象上的成员函数[重复]

    这个问题在这里已经有答案了 在这里遇到一个非常奇怪的错误 我正在编写一个平面文件数据库类 这一切都工作正常 直到我刷新 现在我不断收到此消息 致命错误 调用非对象上的成员函数 name home reithg public html tes
  • AVD 管理器 - 无法再运行多个模拟器

    我知道 AVD 管理器可以运行多个模拟器 但在过去几天的新版本中 它停止了工作 它不再执行启动 4 个命令提示符窗口的操作 并且只有一个加载栏 但现在我无法同时运行 1 个以上的命令提示符窗口 当我单击开始时 加载栏完成 但没有加载模拟器
  • 授予 NTFS 权限时继承的权限丢失

    我试图为特定用户授予 UNC 路径上的 NTFS 权限 但我看到不同的行为取决于 UNC 路径 下面是代码 来自MSDN http msdn microsoft com en us library c1f66bc2 aspx 我用它来授予权
  • “flutter packages get”和“flutter pub get”有什么区别?

    我刚刚升级 Android Studio 并看到flutter packages get变成flutter pub get在 工具 gt 颤振 中 这在功能上有什么变化吗 或者它们完全一样吗 他们都做同样的事情 为了证明这一点 我创建了两个
  • Pinterest API 搜索不再工作

    我正在寻找 pinterest API 端点 我已经找到了一些网址 https api pinterest com v3 domains
  • Python selenium 将键发送到文本区域

    我正在使用 Python 3 4 4 访问网站 https readability score com https readability score com 有一个文本区域 当添加新值时会动态更新 我正在尝试将字符串输入到该文本区域框中
  • @EnableAspectJAutoProxy 不起作用

    我正在使用 Spring Boot 并且我想将 AspectJ 与它一起使用 以下作品 当然 Aspect Component public class RequestMappingAspect Before annotation org
  • 创建带有框字符的控制台菜单

    我已经构建了一个菜单 但我想将其格式化为如下所示 菜单标题位于框中 选项位于框中 我找到了来自的盒子字符http en wikipedia org wiki Box drawing character http en wikipedia o
  • 是否有Python内置函数可以确定可迭代对象是否包含特定序列?

    例如 类似 gt gt gt 1 2 3 contains sequence 1 2 True gt gt gt 1 2 3 contains sequence 4 False 我知道in运算符可以对字符串执行此操作 gt gt gt 12
  • 如何在禁用的控件上显示工具提示?

    我正在显示按钮列表 其中一些可能被禁用 我需要在禁用按钮上显示工具提示 并解释其禁用原因 但似乎我无法在不禁用工具提示的情况下禁用该按钮 有没有一个简单的方法可以解决这个问题 将按钮包装在一个组中 然后将工具提示应用到该组
  • 根据 Pandas DataFrame 中的其他列值在列之间移动行值

    我有一个熊猫数据框 其中包含生物体名称及其抗生素敏感性列表 我希望根据以下规则将所有生物体合并到下面数据框中的一列中 如果 ORG1 A 则不执行任何操作 如果 ORG1 A 且 ORG2 A 则将 ORG2 值移至 ORG1 列 如果 O