在多索引数据框中选择行

2024-02-11

我想单独提取“S”的 bin,其中每列 (X&Y) > 0.5,或多个 bin > 0.5 *“行数”。

在示例中;

对于“AR1”,应仅选择 bin 4,因为“X”和“Y”> 0.5(蓝色指示)

对于“PO1”,应选择 bin 1、2、3 和 4,因为“X”和“Y”> (4 * 0.5)(黄色指示)。

我之前已经尝试过这个for loop,但这没有正确工作;有条件地选择多个(相邻)行 https://stackoverflow.com/questions/41590518/selecting-multiple-neighboring-rows-conditionally

np.random.seed(0)

N = 20
S = ['AR1', 'PO1']

df = pd.DataFrame(
    {'X':np.random.uniform(-1,1,N),
     'Y':np.random.uniform(-1,1,N),
     'S':np.random.choice(S,N),
    })

df['bins_X'] = df.groupby('S')['X'].apply(pd.qcut, q=5, labels=np.arange(5))    # create bins per column 'S'

def func(df):                                                                   # create function to group per 'S' and their bins
    df1 = df.groupby(['S','bins_X']).sum()
    new_cols= list(zip(df1.columns.get_level_values(0)))
    df1.columns = pd.MultiIndex.from_tuples(new_cols)
    return df1

print func(df)

EDIT

它应该看起来像问题中所示的 df ,但不符合条件的行被过滤掉。我检查的是这个;对于任何行(bin),单独或组合的 X 和 Y > 0.5 中的值。仅连续组合行,组合 2、3、4 或 5 行。

即,0 的行组合为 ; 0+1、0+1+2、0+1+2+3 和 0+1+2+3+4。对于 1 ; 1+2、1+2+3 和 1+2+3+4 等。

多行的总和等于行数 x 0.5,例如,对于第 0 行到第 4 行,X 和 Y 必须 > 2.5。

编辑2: @JohnE 和 piRSquared,您的两个解决方案都有效,但是当数据框中存在不应评估的其他列时,哪一个会工作得更好?

另外,如果我想在你们的解决方案中添加一个附加条件怎么办?

编辑3: @piRSquared,当对某些列进行子集化时,我只得到返回的那些列,而我需要所有这些列,而不仅仅是子集化的列。

你能帮忙吗?谢谢。


这是一种矢量化方法,顶层只有一个循环(groupby.apply)

# columns that I care about
cols = ['X', 'Y']
df1.groupby(level=0)[cols].apply(find_window)

def find_window(df):
    v = df.values
    s = np.vstack([np.zeros((1, v.shape[1])), v.cumsum(0)])

    threshold = .5

    r, c = np.triu_indices(s.shape[0], 1)
    d = (c - r)[:, None]
    e = s[c] - s[r]
    mask = (e / d > threshold).all(1)
    rng = np.arange(mask.shape[0])

    if mask.any():
        idx = rng[mask][d[mask].argmax()]

        i0, i1 = r[idx], c[idx]
        return pd.DataFrame(
            v[i0:i1],
            df.loc[df.name].index[i0:i1],
            df.columns
        )

解释

strategy

  • numpy.triu_indices https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.triu_indices.html:我需要评估滚动的每个可能的窗口mean大于一些threshold。我将从位置 0 到 0 开始,然后从 0 到 1,然后...然后 1 到 1,1 到 2...等等,来捕获每个可能的窗口。但在完成之前我必须始终从一个位置开始。我可以通过以下方式访问这些组合numpy.triu_indices https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.triu_indices.html.
  • cumsum https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.cumsum.html:获取由我从中获得的每个索引组合指定的扩展数组会有点棘手(可行)np.triu_indices。更好的方法是计算cumsum并取一个索引与下一个索引的差值。
  • 我必须在我的前面加上零cumsum这样我就可以得到第一行的差异。
  • 但总数并不是手段。我需要除以行数才能得到平均值。方便地,结束位置和开始位置之间的差异恰好是行数,因此也是将总和除以计算平均值的适当数字。
  • 现在我有了办法,e / d,我检查哪些是> threshold并确定起始位置和结束位置的哪些组合的均值大于两列的阈值。
  • 然后,我在均值大于阈值的组合中确定行数最多的组合。
  • 我展开头寸并重建数据框
  • groupby and apply... QED

时间测试


有更多数据

np.random.seed(0)

N = 300
S = ['AR1', 'PO1', 'AR2', 'PO2', 'AR3', 'PO3']

df = pd.DataFrame(
    {'X':np.random.uniform(-1,1,N),
     'Y':np.random.uniform(-1,1,N),
     'S':np.random.choice(S,N),
    })

df['bins_X'] = df.groupby('S')['X'].apply(pd.qcut, q=20, labels=np.arange(20))    # create bins per column 'S'

def func(df):                                                                   # create function to group per 'S' and their bins
    df1 = df.groupby(['S','bins_X']).sum()
    new_cols= list(zip(df1.columns.get_level_values(0)))
    df1.columns = pd.MultiIndex.from_tuples(new_cols)
    return df1

df1 = func(df)

时差更是戏剧性

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

在多索引数据框中选择行 的相关文章

  • DynamodB:如何更新排序键?

    该表有两个键 filename 分区键 和eventTime 排序键 我要更新eventTime对于某些filename Tried put item and update item 发送相同的filename与新的eventTime但这些
  • 如何通过 python 中的函数运行列表?

    我试图通过我创建的函数运行我的列表 但不断收到错误 我不知道出了什么问题 温度 F temp f 19 21 21 21 23 功能 def fahrToCelsius tempFahrenheit return tempFahrenhei
  • Scrapy 文件管道不下载文件

    我的任务是构建一个可以下载所有内容的网络爬虫 pdfs 在给定站点中 Spider 在本地计算机和抓取集线器上运行 由于某种原因 当我运行它时 它只下载一些但不是全部的 pdf 通过查看输出中的项目可以看出这一点JSON 我已经设定MEDI
  • 将整数系列转换为交替(双元)二进制系列

    我不知道如何最好地表达这个问题 因为在这里谷歌搜索和搜索总是让我找到更复杂的东西 我很确定这是基本的东西 但对于我的生活来说 我找不到一个好的方法来做到这一点下列 给定一个整数序列 比如说 for x in range 0 36 我想将这些
  • 了解 Python 2.7 中的缩进错误

    在编写 python 代码时 我往往会遇到很多缩进错误 有时 当我删除并重写该行时 错误就会消失 有人可以为菜鸟提供 python 中 IndentationErrors 的高级解释吗 以下是我在玩 CheckIO 时收到的最近 inden
  • 无法通过 Android 应用程序访问我的笔记本电脑的本地主机

    因此 我在发布此内容之前做了一项研究 我发现的解决方案不起作用 更准确地说 连接到我的笔记本电脑的 IPv4192 168 XXX XXX 没用 连接到10 0 2 2 加上端口 不起作用 我需要测试使用 Django Rest 框架构建的
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 在 django 中导入设置时出现奇怪的错误

    我有很多项目在 ubuntu 中使用 python2 7 和 virtualenv virtualenvwrapper 工作 在我的工作中 一些开发人员使用 macosx 和 windows 通常我像往常一样创建项目 django admi
  • 使用 ElementTree 在 python 中解析 xml

    我对 python 很陌生 我需要解析一些脏的 xml 文件 这些文件需要先清理 我有以下 python 代码 import arff import xml etree ElementTree import re totstring wit
  • 将图与热图(可能是对数)配对?

    How to create a pair plot in Python like the following but with heat maps instead of points or instead of a hex bin plot
  • Python:导入模块一次然后与多个文件共享

    我有如下文件 file1 py file2 py file3 py 假设这三个都使用 lib7 py lib8 py lib9 py 目前 这三个文件中的每一个都有以下行 import lib7 import lib8 import lib
  • 如何通过selenium中弹出的身份验证?

    我正在尝试使用带有 Selenium 的 Python 脚本加载需要身份验证的网页 options webdriver ChromeOptions prefs download default directory r download de
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • 为什么从 openAI 导入 Universe 模块时出现“无效语法”错误

    当我导入时universe来自 openAI 的模块 我收到以下错误 Traceback most recent call last File
  • ProcessPoolExecutor 传递多个参数

    ESPN播放器免费 class ESPNPlayerFree def init self player id match id match id team 团队名单1 277906 cA2i150s81HI3qbq1fzi za1Oq5CG
  • Chrome 驱动程序和 Chromium 二进制文件无法在 aws lambda 上运行

    我陷入了一个问题 我需要在 AWS lambda 上做一些抓取工作 所以我按照下面提到的博客及其代码库作为起点 这非常有帮助 并且在运行时环境 Python 3 6 的 AWS lambda 上对我来说工作得很好 https manivan
  • 从 Django 运行 shell 命令

    我正在 Django 中开发一个网页 使用 apache 服务器 需要调用 shell 命令来启用 禁用一些守护进程 我尝试这样做 os system service httpd restart 1 gt HOME out 2 gt HOM
  • 超过两个点的Python相对导入

    是否可以使用路径中包含两个以上点的模块引用 就像这个例子一样 Project structure sound init py codecs init py echo init py nix init py way1 py way2 py w

随机推荐

  • Azure 上的 Web Api 使用“return InternalServerError(ex)”不显示错误详细信息

    我的 Web Api 在本地运行时 在发布模式下 将返回以下格式的任何错误 Message An error has occurred ExceptionMessage No text specified ExceptionType Sys
  • 如何在 PrimeFaces 中的 CommandButton 上定义带有闭包的 oncomplete 事件?

    我正在使用一些 JavaScript 交互性扩展 PrimeFaces 应用程序的一部分 一切都始于CommandButton它从 bean 获取一些数据并调用 JavaScript 目前 它看起来像这样
  • 如何显示xml文件中的视频?

    您好 我使用下面给出的 xml 文件 如何从 xml 文件获取视频
  • 使用CMD在Mysql中导入压缩文件

    我正在尝试使用命令提示符将压缩数据库文件导入 Mysql 使用以下命令 7z lt backup sql 7z mysql u root test The root user don t有什么password与之相关 test是我的目标空白
  • WinForm应用程序数据持久化(C#)

    我相信 ASP NET 应用程序中 可变短期 持久性的最佳方法是 会话变量 会话范围 应用变量 应用范围 页面视图 页面范围 应用设置 应用范围 Windows 窗体应用程序中 可变短期 持久性的最佳方法是什么 表格范围 用户会话范围 应用
  • 如何将数据转换为非等列?

    我有一个事件数据集 按以下分组let像这样 set seed 3 events lt data frame let rep LETTERS 1 2 each 3 age c 0 sample 1 20 size 2 0 sample 1 2
  • 使用 boost 的 async_write 的异步 tcp 服务器会导致错误的文件描述符

    首先 我不是以英语为母语的人 所以我可能会犯一些语法错误 对此感到抱歉 我正在尝试使用 C 和 Boost 创建一个异步 TCP 服务器 我已经成功接受客户并收到他们的消息 但我无法回复他们的消息 我想要实现的是在 TCPServer 类上
  • 从 Xamarin / C# 中的 URL 加载 UIImage

    已经过去4年了这个问题 https stackoverflow com questions 2095635 load an image from a url已得到答复这篇博文 http escoz com blog displaying w
  • 使用 PHP 从 Microsoft Teams 自定义机器人验证 HMAC

    我正在尝试使用 PHP 验证 Microsoft Teams 自定义机器人 遵循 Microsoft指示 https learn microsoft com en us microsoftteams platform concepts cu
  • CUDA 确定每个块的线程、每个网格的块

    我是 CUDA 范式的新手 我的问题是确定每个块的线程数和每个网格的块数 这是否需要一些艺术和尝试 我发现许多例子似乎为这些事情选择了任意的数字 我正在考虑一个问题 我可以将任意大小的矩阵传递给乘法方法 这样 C 的每个元素 如 C A B
  • Java 8 中流的笛卡尔积作为流(仅使用流)

    我想创建一种方法 该方法创建一个元素流 这些元素是多个给定流的笛卡尔积 最后由二元运算符聚合为相同类型 请注意 参数和结果都是流 not收藏 例如 对于两个流 A B and X Y 我希望它产生价值流 AX AY BX BY 简单的串联用
  • Docx4j 字符串中的换行符

    我有这个字符串 Prueba Lista li1 li2 li3 li4 Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Ta
  • dplyr 中的 substr %>% mutate

    pcd lt data frame tripNo c 618 618 610 610 610 619 procDate as Date c 2016 03 02 2016 03 03 2016 03 02 2016 03 03 2016 0
  • 手动调用按钮上的 click() ,我可以传递任何参数吗?

    我在 jquery javascript 代码中手动调用页面上的按钮上的 click 我需要传递一个参数来单击 然后我可以在响应单击事件的函数上读取该参数 这可能吗 你需要调用 trigger 您可以在那里传递任意数量的参数 element
  • 将尾部输出通过管道传输到另一个脚本中

    我正在尝试将 tail 命令的输出通过管道传输到另一个 bash 脚本中进行处理 tail n 1 f your log file myscript sh 但是 当我运行它时 永远不会到达 1 参数 在 myscript sh 内 我缺少什
  • ORA-38104: ON 子句中引用的列无法更新

    我有一个带有删除标志的简单表 记录应在此列中更新而不是删除 create table PSEUDODELETETABLE ID NUMBER 8 not null PKEY NAME VARCHAR2 50 not null ISDELET
  • 为订阅优惠生成签名 - Xcode - Swift

    我想问是否有人已经实现了 inapp 订阅 自动续订 的新优惠 如果可能的话 在服务器端创建系统以使用 p8 密钥和 php 创建此签名的难度 我在苹果文档中找到了这个 我不确定是否理解它 https developer apple com
  • Jquery 无法检测 IE 11

    刚刚偶然发现一个问题 当尝试使用 Jquery 检测 IE 11 当前正在播出的测试版 时 结果是 firefox 相同的代码检测 IE 10 我需要知道用户正在使用什么浏览器才能显示不同的指令 我正在 Oracle VirtualBox
  • Spark DataFrame 架构可为空字段

    我在 Scala 和 Python 中编写了以下代码 但是返回的 DataFrame 似乎没有应用我正在应用的架构中的非空字段 italianVotes csv是一个 csv 文件 以 作为分隔符和四个字段 我正在使用火花2 1 0 意大利
  • 在多索引数据框中选择行

    我想单独提取 S 的 bin 其中每列 X Y gt 0 5 或多个 bin gt 0 5 行数 在示例中 对于 AR1 应仅选择 bin 4 因为 X 和 Y gt 0 5 蓝色指示 对于 PO1 应选择 bin 1 2 3 和 4 因为