根据列聚合过滤选定的列

2023-12-24

我希望仅选择唯一值少于 3 个的列。我可以通过生成布尔掩码pl.all().n_unique() < 3,但我不知道是否可以通过 Polars API 使用该掩码。

目前,我正在通过 python 解决这个问题。有更惯用的方法吗?

import polars as pl, pandas as pd
df = pl.DataFrame({"col1":[1,1,2], "col2":[1,2,3], "col3":[3,3,3]})
# target is:
# df_few_unique = pl.DataFrame({"col1":[1,1,2], "col3":[3,3,3]})

# my attempt:
mask = df.select(pl.all().n_unique() < 3).to_numpy()[0]
cols = [col for col, m in zip(df.columns, mask) if m]
df_few_unique = df.select(cols)
df_few_unique

相当于熊猫:

df_pandas = df.to_pandas()
mask = (df_pandas.nunique() < 3)
df_pandas.loc[:, mask]

Edit:经过一番思考,我发现了一种更简单的方法来做到这一点,一种根本不依赖布尔掩码的方法。

pl.select(
    [s for s in df
     if s.n_unique() < 3]
)
shape: (3, 2)
┌──────┬──────┐
│ col1 ┆ col3 │
│ ---  ┆ ---  │
│ i64  ┆ i64  │
╞══════╪══════╡
│ 1    ┆ 3    │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 1    ┆ 3    │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2    ┆ 3    │
└──────┴──────┘

之前的回答

一种简单的方法是使用compress来自 Python 的函数itertools.

from itertools import compress
df.select(compress(df.columns, df.select(pl.all().n_unique() < 3).row(0)))
>>> df.select(compress(df.columns, df.select(pl.all().n_unique() < 3).row(0)))
shape: (3, 2)
┌──────┬──────┐
│ col1 ┆ col3 │
│ ---  ┆ ---  │
│ i64  ┆ i64  │
╞══════╪══════╡
│ 1    ┆ 3    │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 1    ┆ 3    │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2    ┆ 3    │
└──────┴──────┘

compress允许我们将布尔掩码应用于列表,在本例中是列名列表。

list(compress(df.columns, df.select(pl.all().n_unique() < 3).row(0)))
>>> list(compress(df.columns, df.select(pl.all().n_unique() < 3).row(0)))
['col1', 'col3']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据列聚合过滤选定的列 的相关文章

随机推荐

  • .gitignore 文件中的路径有何不同?

    我一直在使用 git 但仍然对 gitignore文件路径 那么 以下两条路径有什么区别 gitignore file tmp public documents 我可以理解tmp 将忽略其中的所有文件和文件夹 我对吗 但是第二行路径是什么意
  • 如何从绝对路径获取相对路径

    我的应用程序中有一部分显示用户通过 OpenFileDialog 加载的文件路径 它占用了太多空间来显示整个路径 但我不想只显示文件名 因为它可能不明确 所以我更愿意显示相对于 assembly exe 目录的文件路径 例如 程序集位于C
  • Apache启动libphp7.3.so找不到

    我已经安装了 php 7 3 和 apache2 但是当我尝试启动 apache2 时 出现此错误 service apache2 start apache2 Syntax error on line 146 of etc apache2
  • 仅将 Maven 依赖项声明为测试运行时

    将 Maven 依赖项声明为仅用于测试运行时 而不是测试编译 类路径的最佳方法是什么 具体来说 我想要slf4j api 日志门面 作为典型的编译范围依赖项 但我想要slf4j simple 适用于单元测试的准系统实现 仅在测试运行时类路径
  • 这个 PowerShell 命令行引用/转义是怎么回事?

    我显然不知道自己在做什么 我终于让这个 PowerShell 命令可以工作了 但我不明白为什么它有效 我关心的是最后的 字符 C Program Files IIS Microsoft Web Deploy msdeploy exe ver
  • 在android中应用RGB滤色器后如何将图像保存在SD卡中

    目前我正在设计一个基于照片编辑的应用程序 在这样做时我遇到了一个问题 即 我已经完成了教程 如何为图像应用 RGB 滤色器 link http android er blogspot in 2012 09 adjust lightness
  • VS Code - git 存储库有太多活动更改,仅启用 Git 功能的子集

    我正在设置 VS Code 以处理保存在 BitBucket 中的现有 Salesforce 项目 我将存储库克隆到我的设备 现在当我打开 VS Code 时 我收到消息 C Users 我的存储库目录 处的 git 存储库有太多活动更改
  • 如何在Godot 4.0游戏引擎中实现可组合的角色/技能系统?

    我目前正在使用 Godot 尝试 MOBA 风格游戏的原型 我正在努力寻找一种管理角色及其技能的方法 所有角色都将具有相似的属性 姓名 生命值 奔跑速度 力量等 然而 所有角色的技能都会有所不同 尽管有些角色非常相似 例如基于投射物的技能将
  • 如何在 Buddypress 中获取用户名/显示名称?

    在 buddypress 默认模板中 发布某个活动的用户名显示如下 bp activity action 但这带来的不仅仅是用户名 有没有更简单的方法来获取用户对象 名称 WordPress 获取用户数据功能不起作用 因为它显示页面作者 而
  • Rails 日期验证与年龄

    在我的 Rails 应用程序中 有一个注册表单 其中包含 DOB 字段 用户的年龄不必超过 18 岁 我如何对此进行验证 我的出生日期格式是 mm dd yy 这个语法非常有趣 你可以这样做 old enough 10 23 2000 to
  • 如何在使用 cardUseCompatPadding 时覆盖 CardView 中的标准填充?

    当我使用 cardUseCompatPadding 在卡片视图中显示阴影时 顶部填充比左侧填充大 如何使两个填充相等 因为我的丝带看起来不漂亮 它在上面更大 谢谢
  • 在博览会应用程序上请求通知权限时收到错误

    我有一个简单的代码 要求过去有效的通知权限 但突然间 它给了我这个错误 错误 调用本机方法时遇到异常 在模块 ExpoNotificationPermissionsModule 上执行导出方法 requestPermissionsAsync
  • 如何使用 pybabel 在 jinja 2.10 {% trans %} 中转义 '%' 字符?

    我正在使用 jinja 2 10 和 pybabel 当我的模板包含以下代码 trans 块内有 字符 时 pybabel compile 不会翻译该字符串 提取的字符串 在 po 中 正常 但在结果页面上它根本没有被翻译 h3 class
  • 从 python 中的函数返回左值

    抱歉 我是 Python 新手 虽然这似乎是一个非常基本的问题 但在询问听众之前 我做了尽职调查 试图避免真正愚蠢的问题 我试图找出从函数返回左值的正确习惯用法 假设我有一个包含 64 个对象的容器 并且我希望能够返回对这些对象的引用 cl
  • Wordpress 中的 PhP 联系表单

    所以我买了一个主题 它有一个简单的 PHP 联系表单 允许用户互相发送消息 但是当发件人填写表单并提交时 电子邮件来自我的默认 WordPress 管理员电子邮件 而不是用户输入的电子邮件地址表格 因此 如果收件人尝试回复他们的电子邮件 邮
  • Google Apps 脚本 - 从模板创建的每个文档中都出现“需要授权”

    我有一个 Google 文档 它有一个自定义 UI 菜单 其中包含一个选项 可以将新页面添加到文档并用一些数据填充它 我使用此文档作为模板 通过 Web 应用程序为单个用户创建许多其他文档 因此 我的用户来到我的 web 应用程序 单击生成
  • Boost::bind 和 Boost Phoenix::bind 有什么区别?

    Boost bind 和 Boost Phoenix bind 有什么区别 phoenix bind就好像lambda bind返回一个表达式模板的函数 该模板记录它必须调用给定的函数 它们被设计为分别与phoenix 和lambda 一起
  • 使用 jQuery 克隆

    我有一个允许用户推荐朋友的表格 我想在 朋友电子邮件 和 朋友姓名 这两个输入字段下方添加一个链接 该链接将克隆 朋友框 一次并将其添加到下面 另外 好友邮箱 和 好友姓名 的name属性为name friend email 0 and n
  • 如何将张量转换为字符串

    我正在测试 tf data 这是现在批量提供数据的推荐方法 但是 我正在加载自定义数据集 因此我需要 str 格式的文件名 但是当创建 tf Dataset from tensor slices 时 它们是 Tensor 对象 def lo
  • 根据列聚合过滤选定的列

    我希望仅选择唯一值少于 3 个的列 我可以通过生成布尔掩码pl all n unique lt 3 但我不知道是否可以通过 Polars API 使用该掩码 目前 我正在通过 python 解决这个问题 有更惯用的方法吗 import po