如何返回与 pandas 数据框中每一行的条件匹配的列标题?

2023-11-29

我有一个熊猫数据框df形式:

     Col1      Col2      Col3      Col4

0    True      False     True      False
1    False     False     False     False
2    False     True      False     False
3    True      True      True      True

这里的 True 和 False 是布尔值。

我正在尝试生成一个新的 pandas 数据框new_df应该是这样的:

     Matched_Cols

0    [Col1, Col3]
1    []
2    [Col2]
3    [Col1, Col2, Col3, Col4]

实现这一目标最有效的方法是什么?


方法#1

这是数组数据处理 -

def iter_accum(df):
    c = df.columns.values.astype(str)
    return pd.DataFrame({'Matched_Cols':[c[i] for i in df.values]})

示例输出 -

In [41]: df
Out[41]: 
    Col1   Col2   Col3   Col4
0   True  False   True  False
1  False  False  False  False
2  False   True  False  False
3   True   True   True   True

In [42]: iter_accum(df)
Out[42]: 
               Matched_Cols
0              [Col1, Col3]
1                        []
2                    [Col2]
3  [Col1, Col2, Col3, Col4]

方法#2

另一个对数组数据进行切片和一些布尔索引 -

def slice_accum(df):
    c = df.columns.values.astype(str)
    a = df.values
    vals = np.broadcast_to(c,a.shape)[a]
    I = np.r_[0,a.sum(1).cumsum()]
    ac = []
    for (i,j) in zip(I[:-1],I[1:]):
        ac.append(vals[i:j])
    return pd.DataFrame({'Matched_Cols':ac})

标杆管理

其他建议的解决方案 -

# @jezrael's soln-1
def jez1(df):
    return df.apply(lambda x: x.index[x].tolist(), axis=1)

# @jezrael's soln-2
def jez2(df):
    return df.dot(df.columns + ',').str.rstrip(',').str.split(',')

# @Shubham Sharma's soln
def Shubham1(df):
    return df.agg(lambda s: s.index[s].values, axis=1) 

# @sammywemmy's soln
def sammywemmy1(df):
    return pd.DataFrame({'Matched_Cols':[np.compress(x,y) for x,y in zip(df.to_numpy(),np.tile(df.columns,(len(df),1)))]})

Using benchit包(很少有基准测试工具打包在一起;免责声明:我是它的作者)来对建议的解决方案进行基准测试。

import benchit
funcs = [iter_accum,slice_accum,jez1,jez2,Shubham1,sammywemmy1]
in_ = {n:pd.DataFrame(np.random.rand(n,n)>0.5, columns=['Col'+str(i) for i in range(1,n+1)]) for n in [4,20,100,200,500,1000]}
t = benchit.timings(funcs, in_, input_name='Len')
t.rank()
t.plot(logx=True)

enter image description here

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

如何返回与 pandas 数据框中每一行的条件匹配的列标题? 的相关文章

  • Python中使用cv2获取当前视频播放位置

    我正在尝试使用 CV2 和 Python 从播放视频中获取当前播放时间位置 如果可能 以毫秒为单位 目前我正在使用此示例代码来播放视频文件 import cv2 import numpy as np file name 2 mp4 wind
  • Python - 包和设置文件

    我有一个 python 包 需要从我的项目目录中提取设置 这是我的项目当前的结构 Project bin mypackage package files Project myproject project files start py se
  • 确定Python模块中的函数是否可用

    我正在研究一些使用Python套接字的代码socket fromfd http docs python org library socket html socket fromfd功能 但是 此方法并非在所有平台上都可用 因此我正在编写一些后
  • 肥皂服务的良好框架是什么?

    我正在寻找一个用于肥皂的好框架service 我更喜欢使用Pythonic框架 但是在查看了soaplib rpclib 太不稳定 SOAPy 不适用于2 7 和ZSI 太 令人困惑 之后 我不确定这是否可能 我对使用另一种语言感到满意 尽
  • 使用子图绘制 pandas 数据框 (subplots=True):放置图例并使用紧凑的布局

    我真的很喜欢 pandas 来处理和分析大数据集 到目前为止 我主要使用 matplotlib 进行绘图 但现在想使用 pandas 自己的绘图功能 基于 matplotlib 因为它需要更少的代码 并且在大多数情况下对我来说似乎足够了 尤
  • 字母表中的加密和解密 - Python GCSE

    我目前正在尝试为学校编写一个程序 以便加密和解密输入的消息 我需要加密或解密的消息仅在字母表中 没有其他符号或密钥 例如 使用消息车加密输入的偏移量为 5 我希望它输出 afs 有人可以帮忙吗 这是我目前的代码 def find offse
  • Python argparse store_true 并将可选选项存储在一个参数中[重复]

    这个问题在这里已经有答案了 我需要识别是否单独给出参数或带有可选字符串或两者都没有 parser add argument options parser parse args so prog py arg 应该存储 进入选项 arg pro
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • 如何抑制 pyinstaller 生成的可执行文件窗口中的所有警告

    我已经使用 pyinstaller 从 python 文件生成了可执行文件 该程序按其应有的方式工作 但在我想隐藏的窗口中出现了一条警告消息 当 python 文件在 IDE 中运行时 以下行会抑制所有警告消息 warnings filte
  • 在 (i)python 脚本中从 jupyter 内核获取输出

    我想从单个 ipython 会话中打开多个内核 在这些内核上运行代码 然后收集结果 但我不知道如何收集结果 甚至不知道如何查看 stdout stderr 我怎样才能做这些事情呢 到目前为止我所得到的 我已经使用如下代码管理了前两个步骤 打
  • 为图例中的点设置固定大小

    我正在制作一些散点图 我想将图例中的点的大小设置为固定的相等值 现在我有这个 import matplotlib pyplot as plt import numpy as np def rand data return np random
  • 对于 pygtk 应用程序来说,什么是好的嵌入式浏览器?

    我计划在我的 pygtk 应用程序中使用嵌入式浏览器 并且我正在 gtkmozembed 和 pywebkitgtk 之间进行辩论 两者之间有什么引人注目的区别吗 还有我不知道的第三种选择吗 应该注意的是 我不会使用它来访问网络上的内容 我
  • 收到的标签值 1 超出了 [0, 1) 的有效范围 - Python、Keras

    我正在使用具有张量流背景的 keras 开发一个简单的 cnn 分类器 def cnnKeras training data training labels test data test labels n dim print Initiat
  • Beautiful Soup 获取动态表数据

    我有以下代码 url https www basketball reference com leagues NBA 2017 standings html all expanded standings html urlopen url so
  • 从 sublime_plugin.WindowCommand 获取当前文件名

    我开发插件sublime text 3 并想要获取当前打开的文件路径 absolute1 self window view file name 在哪里self is sublime plugin WindowCommand 但失败了 Att
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • python pandas如何在多个条件下过滤字符串

    我有以下数据框 import pandas as pd data 5Star FiveStar five star fiv estar data pd DataFrame data columns columnName 当我尝试用一 种条件
  • Python列表问题

    我在使用 python 列表时遇到问题 简化版本是 mylist1 some items in a list mylist2 mylist1 mylist1 pop i mylist insert i item print mylist1
  • 将 pandas 数据框中的多列更改为日期时间

    我有一个 13 列和 55 000 行的数据框 我正在尝试将其中 5 行转换为日期时间 现在它们返回类型 对象 我需要转换这些数据以进行机器学习 我知道如果我这样做 data birth date pd to datetime data b

随机推荐

  • Geochart 用独特的颜色填充国家/地区,并用其颜色作为图例显示国家/地区名称 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我需要用列表中指定的唯一颜色填充每个国家 并显示国家名称及其颜色作为地图下面的图例 如随附的图像所示 任何帮助将不胜感激
  • 如何确定 ms sql server 2005 中打开/活动连接的总数

    我的 PHP MS Sql Server 2005 win 2003 应用程序有时会变得非常无响应 内存 CPU 使用率不会飙升 如果我尝试从 sql management studio 打开任何新连接 那么它只会挂在打开的连接对话框中 如
  • 什么是 AndroidX?

    我正在阅读有关 Android 房间库的内容 我看到他们改变了包裹android to androidx 我不明白 有人可以解释一下吗 implementation androidx room room runtime room versi
  • 无法将“In-Reply-To”参数传递给 Microsoft Graph sendMail

    我允许用户使用 Microsoft Graph API 使用 Outlook 帐户发送电子邮件 但它似乎在另一端创建多个线程 当使用 Mailgun API 发送用户电子邮件时 我能够传递引用前一条消息 Message ID 的 In Re
  • 如何估计 Pandas 的 DataFrame 需要多少内存?

    我一直在想 如果我正在将一个 400MB 的 csv 文件读取到 pandas 数据帧中 使用 read csv 或 read table 有什么方法可以猜测这将需要多少内存 只是想更好地感受数据帧和内存 df memory usage 将
  • 从 Clojure 记录返回普通地图

    我有一个记录 defrecord Point x y def p Point 1 2 现在我想从记录中提取地图 这些方法可以完成工作 这些是好方法吗 还有更好的方法吗 into concat p into map identity p ap
  • 正则表达式计算字符串中逗号的数量

    如何构建一个正则表达式来匹配包含任意字符但必须包含 21 个逗号的任意长度的字符串 21 That is Start of string Start of group Any character except comma zero or m
  • 为什么使用Intent.createChooser()?

    我找到了一些发送电子邮件的代码 它看起来像这样 startActivity Intent createChooser emailIntent Email 我把它改为 startActivity emailIntent 结果在我的设备上显示相
  • 如何在 Google App Engine 中导入模块?

    我根据默认模板创建了一个简单的 GAE 应用程序 我想添加一个外部模块 例如短网址 我该怎么做呢 到目前为止 我发现的方向令人困惑 而且我猜 GAE 似乎没有使用 PYTHONPATH 原因很明显 只需将short url py文件位于应用
  • 用户取消基本身份验证后出现空白页面

    我用谷歌搜索了很多关于这个问题的信息 但仍然没有找到为什么会发生这种情况 当用户在浏览器中取消 BASIC 身份验证表单时 会出现空白页面 401页面是在Tomcat webapp中设置的 在Firebug中我可以看到401未经授权 也许响
  • 具有多个输入的 Keras 序列模型

    我正在制作一个 MLP 模型 它接受两个输入并产生一个输出 我有两个输入数组 每个输入一个 和 1 个输出数组 该神经网络有 1 个隐藏层和 2 个神经元 每个数组有 336 个元素 model0 keras Sequential kera
  • Firebase - 云功能 - 对集合进行查询

    假设我有两个包含用户和故事的顶级集合 现在每次用户的文档得到更新 只有值username or photoUrl 我想更新故事集合中文档的这些属性 一个用户文档可能如下所示 缩短 username blubber photoUrl my p
  • 在android中访问.sqlite数据库(>1Mb大小)

    我正在开发一个图书馆应用程序 并将书籍存储为 sqlite 文件 每本书的sqlite数据库文件大小约为10MB 我首先尝试将其放入资产文件夹中 然后将其复制到数据库 文件夹中 但由于文件 gt 1Mb 这给了我一个 IOException
  • MS Access 字段作为列

    如何在 MS Access 中进行查询 以便将字段分组到列中 通过例子更容易解释 Table Brand Quantity Date 1 MTZ 3 2012 03 2 MTZ 1 2012 03 3 Belor 2 2012 04 4 Y
  • 删除特定运输类别的 Woocommerce“下订单”按钮

    我有一个场景 我需要删除 Woo commerce 结帐屏幕上的 下订单 按钮 目前我有两种运输方式 灵活运输和货运 如果客户将运输类别为 货运 的商品添加到购物车 我当前的代码将禁用灵活的运输方法 然后货运方法会显示一条 致电了解当前费率
  • 无法运行 bms-samples-cordova-hellopush - 找不到 bms_samples_cordova_push-Swift.h 文件

    我正在尝试运行可用的推送通知示例GitHub 不幸的是 配置如概述here不起作用 文件说 在你的顶部AppDelegate m import your project name Swift h 如果您的项目名称包含空格或连字符 请在导入语
  • “perf sched record”如何计算上下文切换?

    I used perf sched record p 8827记录特定程序的调度程序活动 但是 当我生成延迟报告时 它显示只有一个上下文切换 而要求它转储原始事件则显示许多切换 摘录如下 这怎么可能有道理呢 我想我在某种程度上误解了事情 切
  • 如何在 Windows 计算机上的 Apache 中设置读/写权限

    我正在 Windows XP 计算机上以 localhost 配置使用 Apache2 2 PHP5 2 2 构建一个网页 我正在开发 app pages submitProcessor php 来验证用户上传的照片 它验证文件是否存在 大
  • 通过引用将 2D 数组传递给函数

    因此 在我的主函数中 我创建了一个二维数组 int dataDim 100 float inData 2 dataDim 我想将它传递给一个函数 在那里我可以用数据填充它 如何以我可以直接填写的方式传递它 或许 function float
  • 如何返回与 pandas 数据框中每一行的条件匹配的列标题?

    我有一个熊猫数据框df形式 Col1 Col2 Col3 Col4 0 True False True False 1 False False False False 2 False True False False 3 True True