Pandas DataFrame 根据列、索引值比较更改值

2024-01-13

假设你有一只熊猫DataFrame其体内有某种数据并且numbers in the column and index names.

>>> data=np.array([['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']])
>>> columns = [2, 4, 8]
>>> index = [10, 4, 2]
>>> df = pd.DataFrame(data, columns=columns, index=index)
>>> df
    2  4  8
10  a  b  c
4   d  e  f
2   g  h  i

现在假设我们想要基于比较索引和列以某种方式操作数据框。考虑以下。

如果索引大于列,则用“k”替换字母:

    2  4  8
10  k  k  k
4   k  e  f
2   g  h  i

其中索引等于列,用“U”替换字母:

    2  4  8
10  k  k  k
4   k  U  f
2   U  h  i

如果列大于索引,则用“Y”替换字母:

    2  4  8
10  k  k  k
4   k  U  Y
2   U  Y  Y

为了让这个问题对所有人都有用:

  • 进行此替换的快速方法是什么?

  • 进行此替换的最简单方法是什么?

最小示例的速度结果

  • jezrael: 556 µs ± 66.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

  • 用户3471881: 329 µs ± 11.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

  • 雷伍德: 4.65 ms ± 252 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


这是重复的吗?我在谷歌上搜索了pandas replace compare index column排名靠前的结果是:

Pandas - 比较两个数据帧并替换匹配条件的值 https://stackoverflow.com/questions/47571309/pandas-compare-two-dataframes-and-replace-values-matching-condition

Python pandas:根据位置而不是索引值替换值 https://stackoverflow.com/questions/38776699/python-pandas-replace-values-based-on-location-not-index-value

Pandas DataFrame:根据条件替换列中的所有值 https://stackoverflow.com/questions/31511997/pandas-dataframe-replace-all-values-in-a-column-based-on-condition

然而,我不认为这些涉及a)是否可能或b)如何以这种方式进行比较


我想你需要numpy.select https://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html与广播:

m1 = df.index.values[:, None] > df.columns.values
m2 = df.index.values[:, None] == df.columns.values


df = pd.DataFrame(np.select([m1, m2], ['k','U'], 'Y'), columns=df.columns, index=df.index)
print (df)
    2  4  8
10  k  k  k
4   k  U  Y
2   U  Y  Y

表现:

np.random.seed(1000)

N = 1000
a = np.random.randint(100, size=N)
b = np.random.randint(100, size=N)

df = pd.DataFrame(np.random.choice(list('abcdefgh'), size=(N, N)), columns=a, index=b)
#print (df)

def us(df):
    values = np.array(np.array([df.index]).transpose() - np.array([df.columns]), dtype='object')
    greater = values > 0
    less = values < 0
    same = values == 0

    values[greater] = 'k'
    values[less] = 'Y'
    values[same] = 'U'


    return pd.DataFrame(values, columns=df.columns, index=df.index)

def jez(df):

    m1 = df.index.values[:, None] > df.columns.values
    m2 = df.index.values[:, None] == df.columns.values
    return pd.DataFrame(np.select([m1, m2], ['k','U'], 'Y'), columns=df.columns, index=df.index)

In [236]: %timeit us(df)
107 ms ± 358 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [237]: %timeit jez(df)
64 ms ± 299 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas DataFrame 根据列、索引值比较更改值 的相关文章

随机推荐

  • 如何让Android模拟器启动更快

    我目前一直坚持使用 Atom CPU 桌面来开发 Android 应用程序 有哪些方法可以改善其启动时间 运行模拟器时 我可以看到模拟器使用的核心数量只有一个 我从 Eclipse ADT 插件中运行模拟器 如何让模拟器使用两个核心而不是一
  • 只需单击标签即可双击

    我有一个标签 并且单击它时正在运行一些功能 但是 当单击事件发生时 双击事件完成 然后我的函数运行两次 你可以看一个简单的例子here http jsfiddle net vgWGT 2 HTML
  • iOS 7 master有导航栏提示时的细节布局

    我在 iOS 7 中遇到布局问题 要重现 请创建一个简单的主从应用程序并将此行插入MasterViewController m self navigationItem prompt Master 这在DetailViewController
  • 正则表达式允许非 ASCII 和外文字母吗?

    是否可以创建一个正则表达式来允许非ascii字母与拉丁字母一起使用 例如中文或希腊符号 例如允许A汉语AbN汉语 我目前有以下内容 w d w d s 只允许使用拉丁字母 In NET p L d p L d s 相当于你的正则表达式 另外
  • Angular2 5 分钟安装错误 - 未定义需求

    我正在做Angular2 5 分钟快速入门 https angular io docs ts latest quickstart html 现在教程已经进行了大约一半 我已经正确设置了以下文件 索引 html 应用程序组件 ts 应用程序
  • 实现观察者模式时出现的问题:“成员引用基类型 ________ 不是结构或联合”

    我一直在实现一个准系统观察者模式 但遇到了一个有点神秘的错误 成员引用基类型 Observer 不是结构或联合 我认为这与我使用模板有关 但我仍然对模板感到相当不舒服 这是有问题的代码 为了简化事情而删除了大多数 cons 析构函数 主题界
  • 在Android中绘画时如何遮盖一个简单的区域?

    下面是一个简化的描述 想象一下 我有一个 View 类 它可以绘制一面墙的图片 并且我想在绘制它时切出一个窗口 假设我扩展该 View 类并重写其dispatchDraw 方法来执行以下操作 首先绘制背景 如果有的话 可以通过窗户看到 接下
  • 有没有办法像oracle中的rownum一样获取Mysql中的行号[重复]

    这个问题在这里已经有答案了 有没有办法像oracle中的rownum一样获取Mysql中的行号 如果没有那么有什么间接的方法吗 请建议 直到MySQL终于支持现代SQL http modern sql com slides 获得类似内容的唯
  • 如何标记和测量斑点的大小?

    我正在用Python学习图像分析 我只是一个初学者 我能够编写代码 我在下面分享 来检测此纳米颗粒图像中的斑点 纳米颗粒 我可以使用以下方法检测到有 10 个纳米粒子cv2 connectedComponents 但现在我需要 用数字标记每
  • 单击标题上的按钮时阻止引导手风琴打开

    我有两个操作按钮位于手风琴的标题上 如下所示 当我单击这些按钮之一时 它会切换手风琴的状态 我尝试过e preventDefault and e stopImmediatePropagation 没有结果 这是jsfiddle https
  • 如何使用垂直对齐:居中;适当地?

    我想让我的列表 导航 与图像 徽标 的中心对齐 我尝试使用vertical align middle 但是当我左右浮动图像时 我无法让它工作 这是我的代码 HTML div img src logo png ul li a href Ite
  • 如何以最简单的方式在 V 2010Express C# 中创建 MRU?

    首先 我是 C 编程的新手 我需要尽快创建一个简单的 MRU 好吧 问题是我尝试查看一些在线示例 但我发现它们有点太令人困惑了 那么 是否任何人都可以在工具条菜单项中创建 最近使用 部分 而无需进入那些复杂的代码 例如 我将无法理解这些东西
  • 如何在 pyparsing 中与 OneOrMore 等进行非贪婪(回溯)匹配?

    我正在尝试使用以下方法将部分标准化的街道地址解析为其组件pyparsing 我想要非贪婪地匹配可能有 N 个令牌长的街道名称 例如 444 PARK GARDEN LN 应该解析为 number 444 street PARK GARDEN
  • 使用 selenium 滚动网站的特定部分。

    我正在尝试创建一个用于滚动该网站的脚本 http m 1688 com offer 39202959720 html spm a26g8 7664812 0 0 dfxn8I http m 1688 com offer 3920295972
  • R:对一列中的完整案例进行求和,并按另一列中的值进行分组(或排序)

    我正在使用airqualityR 中可用的数据集 并尝试计算数据中不包含任何数据的行数NAs 同时聚合Month 数据如下 head airquality Ozone Solar R Wind Temp Month Day 1 41 190
  • 无法解析“:app@debugUnitTest/compileClasspath”、:app@debugAndroidTest/compileClasspath 的依赖关系

    情况 创建最简单的项目 添加到项目模块 文件 gt 新建 gt 新模块 手机 平板模块 添加对模块的依赖 并得到错误 无法解析 app debug compileClasspath 的依赖关系 无法解析项目 testmodule 无法解析
  • MySQL-多列索引

    我正在学习 MySQL 索引 发现索引应该应用于 SELECT 查询的 WHERE 子句中命名的任何列 然后我发现多列索引与多个索引 https stackoverflow com questions 7261536 mysql multi
  • Dart源文件更改时自动刷新页面

    当源文件发生更改时 如何使 Dartium 自动重新加载 Web 客户端应用程序 有关的 如何让 Firefox 在文件更改时自动刷新 https stackoverflow com questions 1346716 firefox au
  • 我从哪里开始分布式计算?

    我对学习分布式计算技术感兴趣 作为一名 Java 开发人员 我可能愿意从Hadoop http hadoop apache org 您能推荐一些书籍 教程 文章吗 也许你可以先阅读一些MapReduce和分布式计算相关的论文 以更好地理解它
  • Pandas DataFrame 根据列、索引值比较更改值

    假设你有一只熊猫DataFrame其体内有某种数据并且numbers in the column and index names gt gt gt data np array a b c d e f g h i gt gt gt colum