如何替换数据帧每行中大于某个阈值的前 n 个元素

2024-04-09

我有一个巨大的数据框,仅包含数字(下面显示的数据框仅用于演示目的)。我的目标是替换数据帧的每一行中的第一行n大于某个值的数字val by 0.

举个例子:

我的数据框可能如下所示:

   c1  c2  c3  c4
0  38  10   1   8
1  44  12  17  46
2  13   6   2   7
3   9  16  13  26

如果我现在选择n = 2(替换数量)和val = 10,我想要的输出将如下所示:

   c1  c2  c3  c4
0   0  10   1   8
1   0   0  17  46
2   0   6   2   7
3   9   0   0  26

在第一行中,只有一个值大于val所以只有一个被替换,在第二行中所有值都大于val但只能替换前两个。第 3 行和第 4 行的模拟(请注意,不仅前两列受到影响,而且一行中的前两个值可以位于任何列中)。

一个简单且非常丑陋的实现可能如下所示:

import numpy as np
import pandas as pd

np.random.seed(1)

col1 = [np.random.randint(1, 50) for ti in xrange(4)]
col2 = [np.random.randint(1, 50) for ti in xrange(4)]
col3 = [np.random.randint(1, 50) for ti in xrange(4)]
col4 = [np.random.randint(1, 50) for ti in xrange(4)]

df = pd.DataFrame({'c1': col1, 'c2': col2, 'c3': col3, 'c4': col4})

val = 10
n = 2

for ind, row in df.iterrows():
    # number of replacements
    re = 0

    for indi, vali in enumerate(row):
        if vali > val:
            df.iloc[ind, indi] = 0
            re += 1
            if re == n:
                break

这是可行的,但我确信有更有效的方法可以做到这一点。有任何想法吗?


你可以编写自己的有点奇怪的函数并使用 with axis=1:

def f(x, n, m):
    y = x.copy()
    y[y[y > m].iloc[:n].index] = 0
    return y

In [380]: df
Out[380]:
   c1  c2  c3  c4
0  38  10   1   8
1  44  12  17  46
2  13   6   2   7
3   9  16  13  26

In [381]: df.apply(f, axis=1, n=2, m=10)
Out[381]:
   c1  c2  c3  c4
0   0  10   1   8
1   0   0  17  46
2   0   6   2   7
3   9   0   0  26

Note: y = x.copy()需要制作该系列的副本。如果您需要就地更改值,则可以省略该行。你需要额外的y因为通过切片,您将得到一个副本而不是原始对象。

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

如何替换数据帧每行中大于某个阈值的前 n 个元素 的相关文章

随机推荐

  • 了解 JavaScript 闭包 - 冻结传递给回调的变量

    我对 JavaScript 闭包还没有基本的了解 我有一个关于具体情况的问题 这也许也是基本和常见的例子 3 秒内从 1 数到 3 请参阅此处的 JSFiddle http jsfiddle net nAh8x http jsfiddle
  • 如何在 Scala Breeze 中压缩两个 DenseVector?

    我想拉两个拉链DenseVectors对每一对进行运算 得到一个新的向量作为结果 使用 scala breeze 实现此目的的最佳方法是什么 我可以通过使用他们来解决这个问题data字段 但我需要构建一个新的DenseVector从结果数组
  • UITextView 不更新其 contentSize

    我正在动态调整 aUITextView的高度和 的高度UITableViewCell当其内容发生变化时 它就会被嵌入 但我也可以粘贴预定义的文本 由于此粘贴是以编程方式进行的 因此问题是 将选定的文本位添加到UITextView的短信并致电
  • 通过字符串查找可绘制对象[重复]

    这个问题在这里已经有答案了 可能的重复 Android 从 drawable String 打开资源 https stackoverflow com questions 2349652 android open resource from
  • GeoAlchemy2:获取某个点的经纬度

    考虑以下SQLAalchemy http www sqlalchemy org GeoAlchemy2 http geoalchemy 2 readthedocs org en 0 2 6 index html具有几何字段的 ORM fro
  • 面向方面编程(AOP)有哪些缺点?

    面向方面编程有哪些可能的和关键的缺点 例如 新手的神秘调试 可读性影响 我认为最大的问题是没人知道如何定义切面的语义 or 如何非程序地声明连接点 如果您无法独立于要嵌入的上下文来定义某个方面的功能 或者无法以不损害其嵌入的上下文的方式定义
  • 如何在 Go 和 Android 之间使用 RSA

    我 1 在 Go 中创建公钥并将其发送到 Android 2 android使用下面的代码来加密它的数据以字符串类型发送到Go 3 去获取字符串数据并尝试解密 但不能 我的Go代码 DecryptWithPrivateKey decrypt
  • Is
  • Angular2指令“无法使用输出元数据读取未定义的属性‘订阅’”

    关于 Angular2 指令 我想使用outputs而不是使用 Output因为我有很多自定义事件并且希望保持 DRY 但是 我有TypeError Cannot read property subscribe of undefined 而
  • SET 查询中“在此上下文中无效使用聚合函数”(Neo4j)

    我想知道为什么这被认为是 Neo4j 的 Cypher 中聚合函数的无效使用 MATCH p Project EMPLOYS n Person SET p youngest MIN n age 虽然以下被认为是有效的用例 MATCH p P
  • MYSQL声明变量

    我不明白这个脚本有什么问题 BEGIN DECLARE crs INT DEFAULT 0 WHILE crs lt 10 DO INSERT INTO continent name VALUES cont crs SET crs crs
  • 我应该使用 SIMD 或向量扩展还是其他什么?

    我目前正在开发一个开源 3D 应用程序框架c questions tagged c 2b 2b with c 11 questions tagged c 2b 2b11 我自己的数学库是这样设计的XNA数学库 http msdn micro
  • 无法向 Mongoose 查询返回的对象添加新属性[重复]

    这个问题在这里已经有答案了 我正在使用 Node js MongoDB 和 Express 编写 API 我似乎无法向我正在迭代的位置对象添加新属性 我根本不明白我的代码的问题 loc是一个普通的对象 它应该可以工作 我错了吗 GET Lo
  • `require` 在 php 中不起作用

    这是我现在正在获取的错误 PHP Fatal error require Failed opening required base data home apps s civic planet 191520 20180221t115719 4
  • 列表活动中的上下文菜单

    我有带有自定义数组适配器的列表活动 当长按列表项时我无法获取上下文菜单
  • 如何使用 vue-cli 3 创建两个单独的包?

    我想构建两个独立的 vue 应用程序 它们将在 Express 应用程序中的两条不同路径上提供服务 公共 vue 应用程序和 管理 vue 应用程序 这两个应用程序有自己的路由器和商店 但它们共享许多自定义组件 如何编辑默认的 webpac
  • Distcp 源长度不匹配

    我在执行时遇到问题distcp两个不同的命令之间hadoop簇 引起原因 java io IOException 长度不匹配 来源 hdfs ip1 xxxxxxxxxxx xxxxx 和 目标 hdfs nameservice1 xxxx
  • Rails 使用 puma,将 localhost:3000 更改为 localhost:3000/example

    我开发了一个 Rails 5 应用程序 可以很好地运行http 本地主机 3000 http localhost 3000 现在 我需要该应用程序在 localhost 3000 example 中启动 并且该链接通过这个新主机 例如 lo
  • 源 bashrc 在 cron 中不起作用

    我们都知道 cron 会忽略 bashrc 和 bash profile 中定义的变量 因此我们必须在 cron 中定义它 我经常做类似问题中写的同样的事情https unix stackexchange com questions 679
  • 如何替换数据帧每行中大于某个阈值的前 n 个元素

    我有一个巨大的数据框 仅包含数字 下面显示的数据框仅用于演示目的 我的目标是替换数据帧的每一行中的第一行n大于某个值的数字val by 0 举个例子 我的数据框可能如下所示 c1 c2 c3 c4 0 38 10 1 8 1 44 12 1