首页 > 编程问答 >Python Pandas 使用 .loc 跨列级别多重索引

Python Pandas 使用 .loc 跨列级别多重索引

时间:2024-07-27 09:46:29浏览次数:9  
标签:python pandas dataframe bioinformatics

我对 python 和 pandas 仍然很陌生,想知道是否有更好的方法来解决我遇到的索引问题。因为我看到人们在这个网站上做了非常巧妙的事情,超出了我通常可以从文档中收集到的内容,所以我想我会问——特别是因为我还在学习。

我有一个包含多个列的 DataFrame级别,级别 0 是“meta”和“rna”,级别 1 是“meta”下的“subject_id”、“疾病”、“时间”和“状态”,“rna”下有数千个 EnsemblGeneID。对我来说,如果我想要“元”列的特定子集和所有“rna”列,我只需将元组列表传递给 df.loc[]

selected_columns = df.loc[:, [("meta", "subject_id"), ("meta", "status"), ("rna",:)]]

但这不起作用,并且根据文档,似乎没有什么比这更优雅的了。有谁知道执行此操作的一种巧妙方法?

我尝试了各种将东西传递给 df.loc[] 进行实验的方法,但大多数都因各种按键错误、切片错误等而出错,以及我能得到什么工作远没有想象中那么优雅。仍在尝试弄清楚我是否可以使用索引器,但与单级 dfs 相比,这似乎过于复杂。

我发现的最有效的方法是 ChatGPT 建议的:

selected_columns = df.loc[:, [('meta', 'subject_id'), ('meta', 'status')] + [('rna', col) for col in df['rna'].columns]]

也许这就是最巧妙的,但这并不像单级 DataFrame 的工作方式那么直观,而且我之前在这里看到过一些魔法,所以想在这里尝试一下。另外,也许一些经验丰富的Python开发人员可以告诉我,尝试像这样导航DataFrame是完全错误的,我应该做其他事情。


可以使用 Pandas 中的多索引选择来实现这一点,而无需列出所有“rna”列。以下是如何操作:

selected_columns = df.loc[:, (slice(None), ('subject_id', 'status', slice(None)))]

这行代码的作用如下:

  • df.loc[:, (..., ...)] :我们使用 .loc 进行基于标签的选择,并在第一个位置使用 : 选择所有行。第二个位置用于列选择,我们将使用一个元组来指定多索引级别。
  • (slice(None), ('subject_id', 'status', slice(None))) :此元组表示列的选择。
    • slice(None) :第一个 slice(None) 选择级别 0 中的所有内容(在本例中为“meta”和“rna”)。
    • ('subject_id', 'status', slice(None)) :这部分选择级别 1 中的列。
      • 'subject_id' 'status' 明确选择这些列。
      • slice(None) 选择级别 1 下的所有“rna”列。

这种方法比列出所有“rna”列更简洁、更高效,尤其是在有数千列的情况下。它利用了多索引切片的功能来选择所需的列子集。

标签:python,pandas,dataframe,bioinformatics
From: 78800337

相关文章

  • Python、Scapy 并导出到 .exe
    目前我会玩一点scapy、Qt和python。到目前为止,使用VSC启动程序时一切正常。现在我尝试使用PyInstaller制作.exe。它也有效,我得到了一个.exe文件,可以打开它并显示我的Qt-Windows。但是当我使用scapy函数时,程序崩溃,没有任何消息,并且窗口关闭。我激活了日志记录并发......
  • 使用 python 检测鼠标是等待还是忙碌
    我正在用Python2.7创建一个脚本。该脚本在应用程序内自动执行鼠标单击。有一些情况,在单击鼠标后,鼠标光标将“等待”,我想等到鼠标光标恢复正常后再进行操作我进入代码中的下一步。Python中是否可以检测鼠标是否正在等待?在Python中没有内置方法可以检测......
  • ValueError:在带有 GATT 的 Python 中,以 16 为基数的 int() 的文字无效:b'0f 18 '
    我正在使用Python和GATT库pxexpect来处理一些数据,但在尝试将十六进制值转换为整数时遇到问题。这是我看到的具体错误:print(int(gatt.before,16)),^^^^^^^^^^^^^^^^^^^^ValueError:invalidliteralforint()withbase16:b'0f18'这是产生错误的代......
  • 我看不懂这个python脚本?
    用于加载.dat文件的Python脚本importcsvfromdjango.core.management.baseimportBaseCommandfromrecommender.modelsimportUser,Artist,Tag,UserArtist,UserTaggedArtist,UserFriendimportosfromdjango.confimportsettings#Definethepathtothedatab......
  • 使用操作系统工具通过 Python 3 扫描图像
    我正在使用python构建一个应用程序,它需要能够连接到扫描仪并处理生成的pdf/jpeg/其他文件中的数据。我一直在尝试找到一种连接到扫描仪以请求扫描的方法,但没有真正的进展。我已经查看了我能找到的所有选项,包括这个答案:我想连接我的图像扫描仪程序我发现的大多......
  • Python,pandas从字符串中解析数字和字符串
    在Python中,我想解析一个字符串并将数字部分(可能有也可能没有小数点)作为浮点数返回,并将后缀作为字符串返回。示例为:7.1英寸->7.1,英寸7.1”->7.1,“7英寸->7.0,英寸-10dB->-10.0,dB-10.2dB->-10.2,dB数字部分和后缀之间没有空格。另外,我想将其应......
  • 如何在 Python 中加载站点的所有资源,包括 AJAX 请求等?
    我知道如何使用Python请求网站并读取其文本。过去,我曾尝试使用像BeautifulSoup这样的库来发出对网站上链接的所有请求,但这并没有得到看起来不像完整URL的内容,例如AJAX请求和大多数对原始域(因为“http://example.com”将丢失,更重要的是,它不是<ahref='url'>......
  • 使用Python进行PDF旋转
    使用python旋转扫描的pdf后,它工作得很好,但将pdf发送给第三方后,第三方仍然将pdf检测为90度pdf有什么办法可以解决旋转和这个问题importPyPDF2withopen('input.pdf','rb')asfile:#CreateaPDFreaderobjectreader=PyPDF2.PdfReader(file)......
  • Python win32serviceutil QueryServiceStatus:返回值是什么意思?
    我正在学习使用pywin32,并尝试在64位Python3.6.4上使用win32serviceutil模块以下代码:importwin32serviceutilasserviceserviceStatus=service.QueryServiceStatus("WinDefend")print(serviceStatus)返回以下元组:(16,4,197,0,0,0,0)我对wind......
  • Python request-html 未下载 Chromium
    importrequestsfrombs4importBeautifulSoupfromrequests_htmlimportHTMLSessionurl="https://dmarket.com/ingame-items/item-list/csgo-skins?title=recoil%20case"sesion=HTMLSession()response=sesion.get(url)response.html.render()soup=B......