快速找到保留排序的 pandas DataFrame 的所有排列的方法?

2023-12-20

我有一个 DataFrame,我想找到它的所有排列,这些排列可以在其中一列上实现简单的升序排序。 (有很多联系。)例如,在下面的 DataFrame 中

df = pd.DataFrame({'name': ["Abe", "Bob", "Chris", "David", "Evan"], 
                   'age': [28, 20, 21, 22, 21]})

我希望按年龄排序并获取订单["Bob", "Chris", "Evan", "David", "Abe"] and ["Bob", "Evan", "Chris", "David", "Abe"].

我是 python (和 pandas)的新手,很好奇是否有一种我看不到的简单方法可以做到这一点。

Thanks!


由于您是按年龄分组,因此让我们返回每个组的所有排列,然后求乘积(使用 itertools 的乘积和排列函数):

In [11]: age = df.groupby("age")

如果我们看一下单个组的排列:

In [12]: age.get_group(21)
Out[12]:
   age   name
2   21  Chris
4   21   Evan

In [13]: list(permutations(age.get_group(21).index))
Out[13]: [(2, 4), (4, 2)]

In [14]: [df.loc[list(p)] for p in permutations(age.get_group(21).index)]
Out[14]:
[   age   name
 2   21  Chris
 4   21   Evan,    age   name
 4   21   Evan
 2   21  Chris]

我们可以通过仅返回每个组的索引来在整个 DataFrame 上执行此操作(这假设索引是唯一的,如果不是)reset_index在这样做之前...你may能够做一些稍微低级的事情):

In [21]: [list(permutations(grp.index)) for (name, grp) in age]
Out[21]: [[(1,)], [(2, 4), (4, 2)], [(3,)], [(0,)]]

In [22]: list(product(*[(permutations(grp.index)) for (name, grp) in age]))
Out[22]: [((1,), (2, 4), (3,), (0,)), ((1,), (4, 2), (3,), (0,))]

我们可以用 sum 将它们粘合起来:

In [23]: [sum(tups, ()) for tups in product(*[(permutations(grp.index)) for (name, grp) in age])]
Out[23]: [(1, 2, 4, 3, 0), (1, 4, 2, 3, 0)]

如果你将这些作为一个列表,你可以应用 loc (这会得到你想要的结果):

In [24]: [df.loc[list(sum(tups, ()))] for tups in product(*[list(permutations(grp.index)) for (name, grp) in age])]
Out[24]:
[   age   name
 1   20    Bob
 2   21  Chris
 4   21   Evan
 3   22  David
 0   28    Abe,    age   name
 1   20    Bob
 4   21   Evan
 2   21  Chris
 3   22  David
 0   28    Abe]

以及名称列(列表):

In [25]: [list(df.loc[list(sum(tups, ())), "name"]) for tups in product(*[(permutations(grp.index)) for (name, grp) in age])]
Out[25]:
[['Bob', 'Chris', 'Evan', 'David', 'Abe'],
 ['Bob', 'Evan', 'Chris', 'David', 'Abe']]

注:它may更快地使用numpy 置换矩阵 https://stackoverflow.com/q/27323448/1240268 and pd.tools.util.cartesian_product。我怀疑这是一个很大的问题,并且不会对此进行探索,除非速度慢得无法使用(无论如何它都可能会很慢,因为可能有很多排列)......

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

快速找到保留排序的 pandas DataFrame 的所有排列的方法? 的相关文章

随机推荐

  • 如何使用layoutIfNeeded?

    何时以及如何layoutIfNeeded用过的 我知道当我们改变视图的布局时 我们可以调用setNeedsLayout更新布局但不确定何时layoutIfNeeded应该使用 注意 我有layoutIfNeeded在实际代码中使用但忘记了它
  • 无法在iOS中将统一的CNContact添加到CNGroup中

    这就是我正在做的 void doCreateGroup self contentView endEditing true NSString newString self contentView groupNameField text str
  • 检索 SQLite 中所有项目的最快方法是什么?

    我在 Windows 上编程 我将信息存储在 sqlite 中 然而我发现获取所有物品有点慢 我正在使用以下方式 select from XXX 检索 1 7MB SQLite DB 中的所有项目大约需要 200 400 毫秒 太慢了 有人
  • 在 NodeJS 中可靠地读取 FIFO

    我正在编写一个与第三方应用程序交互的 NodeJS 脚本 第三方应用程序将在文件打开期间将数据写入文件 我希望我的 NodeJS 应用程序能够实时接收这些数据 我的脚本创建一个 fifo child process spawnSync mk
  • 在 C++ 中从 WMI(Win32_LogicalDisk 类)调用 Chkdsk ->“参数无效”

    我正在尝试从 C 中的 WMI 运行 Chkdsk 我正在使用 Qt Framework ExecMethod 返回 参数无效 我已经根据设置参数http msdn microsoft com en us library cc250766
  • 如何获取隐藏父元素的大小?

    1 4 4 返回隐藏元素的大小 但是另一个隐藏元素中的元素呢 除了 getWidth 还有更好的解决方案吗
  • SqlAlchemy:如何实现 DROP TABLE ... CASCADE?

    我需要删除 PostgreSQL 数据库中具有外键约束并且需要的表DROP TABLE CASCADE 我可以执行原始 SQL engine execute DROP TABLE s CASCADE table name 但是 我想实现这种
  • 尝试在 r 中运行 glmer 时出现警告消息

    目前 我正在尝试在最新版本的 R 和 lme4 上重新运行旧的数据分析 二项式 glmer 模型 从 2013 年初开始 因为我不再有旧版本的 R 和 lme4 但是 我遇到了与 dmartin 和 carine 之前的线程 第一条警告消息
  • Bundle.main.path(forResource... 查找 xml 文件时总是返回 nil

    我正在尝试从我的包中读取文件 我知道以前有人问过这个问题 但我已经阅读了其他解决方案 但其中似乎不符合我的情况 我有一个 XML 文件 我可以在项目导航器中看到它 我还可以通过转到项目 构建阶段 复制捆绑资源来检查它是否包含在捆绑包中 我尝
  • 从 Azure ACS 下载登录页面后,如何使返回 URL 再次正常工作?

    Azure 培训工具包包括一个名为 IntroToACS2 的实验室 在其中创建一个 WebRole 并启用 ACS 以便您可以使用 Google Live 或 Yahoo ID 登录 本实验的第二部分将引导您完成从 ACS 下载示例登录页
  • gcc/ld:动态链接中的 -Wl、-rpath 是什么?静态链接中的 -l 是什么?

    对于 my dir path foo a 和 my dir path bar a 要使用 gcc g 静态链接 可以使用 L指定包含静态库的目录和 l指定库的名称 在这种情况下 人们会写gcc L my dir path lfoo lbar
  • 将新对等点添加到超级账本结构组织中需要采取哪些步骤?

    我正在学习使用 Hyperlegder Fabric 构建网络 因为我已经使用 Hyperledger Composer 开发了一个网络 下一步是构建生产网络 我已经开始构建第一个网络示例并开始工作 我已经添加了 Org3 和 2 个对等点
  • Windows:从区域设置字符串获取 LCID?

    我有代表语言环境的字符串数据 例如 fr 或 en 我需要将其转换为适当的 LCID 值 例如0x80c or 0x409 有没有函数或宏可以做到这一点 我在 Windows 7 上使用 C 这些是 LCID 值 不确定 LID 是什么意思
  • 如何声明循环变量的类型

    我想做一些整数算术 并且正在检查如果我提供有关 SBCL 的明确信息 SBCL 是否可以获得更快的速度type我使用的价值观 虽然我可以轻松使用declare in a defun or let直接这样做 我不明白将该语句放在何处loop构
  • Play框架-在mySql中上传文件

    在 play 2 0 中上传 mySql db 文件的最简单方法是什么 上传数据库或上传文件夹中的文件 然后在数据库中保存链接 我会去将参考保存在数据库中并将图像上传到网络服务器上的某个位置 或者 如果您坚持将图像保存在数据库中 请将其另存
  • SQL Server 2005 计算列被持久化

    我的表中有一些计算列 需要知道是否应该将 Is Persisted 设置为 true 有什么优点 有什么缺点吗 持续 是什么意思 在此上下文中 持久 是指 物理存储 这意味着计算值在插入 和更新 时计算一次并存储在磁盘上 因此不必在每次选择
  • 光滑的旋转木马。想要自动播放幻灯片一次并停止

    我正在将 Slick 插入网站 我有主页除了我无法弄清楚的一件事之外 正在使用流畅的幻灯片放映 我有 2 张幻灯片 他们从图像的幻影版本发展而来一张一张地淡入图像的全分辨率细节 那时我希望最后一个图像停止并停留在那里 滑块的标记是 div
  • 使用 TextFormatted 删除未在 EditText 中呈现的 html 标签

    我正在尝试在 EditText 控件中呈现 html 字符串 粗体 斜体和下划线 html 可以正确呈现 但删除线会被忽略 这是 EditText 控件 没什么花哨的
  • 为什么 python VM 有 co_names 而不是仅仅使用 co_consts?

    Python 编译器生成的代码对象包含指令中使用的常量元组 名为co consts 以及一个包含名称的元组 名为co names 为什么有两个不同的列表 仅使用不会更简单co consts也为了名字 考虑以下函数 def f x x n r
  • 快速找到保留排序的 pandas DataFrame 的所有排列的方法?

    我有一个 DataFrame 我想找到它的所有排列 这些排列可以在其中一列上实现简单的升序排序 有很多联系 例如 在下面的 DataFrame 中 df pd DataFrame name Abe Bob Chris David Evan