当前位置: 首页 > 知识库问答 >
问题:

在使用isin()时,如何维护原始数据帧索引并保持输入列表的顺序?

方博学
2023-03-14

我有以下数据帧:g=pd。DataFrame({'A':[1,2,42,5,7],'B':[5,6,7,3,2]})

    A  B
0   1  5
1   2  6
2  42  7
3   5  3
4   7  2

am使用以下列表筛选数据帧:

list_values = [5,7,1]

并使用以下命令获得以下输出:

indexes = g[g['A'].isin(list_values)].index.values

输出

array([0, 3, 4], dtype=int64)

如何更改代码,使索引如下所示?

array([3, 4, 0], dtype=int64)

本质上,我正在寻找一种方法来过滤具有列表的DF,并按照筛选列表的顺序返回原始索引值。

谢谢

我查看了这个,但并没有找到我要查找的内容:按列表的顺序从列表中选择数据帧的行

共有1个答案

裴俊雅
2023-03-14

您可以使用orderedCategoricalDtype强制执行自定义排序顺序。排序后,返回5、7、1的所有索引。

import pandas as pd

my_cat = pd.CategoricalDtype(categories=list_values, ordered=True)
#CategoricalDtype(categories=[5, 7, 1], ordered=True)

g.loc[g['A'].isin(list_values), 'A'].astype(my_cat).sort_values().index
#Int64Index([3, 4, 0], dtype='int64')
 类似资料:
  • 问题内容: 这是我的pojo,注为实体 等等...... 上面的实体是使用注释创建的,当我查看mysql数据库时,没有按顺序创建列,而是在下面编写的,相反,第一列是book_id,然后是book_desc,然后是book_athor,然后是book_short_desc,然后是book_name。 我的问题是如何告诉hibernate以与我在Java代码中编写的顺序相同的顺序创建列? 有没有任何注

  • 我在一次编码竞赛中遇到了以下问题。我试了很多,但是一个私人测试用例总是因为错误的答案而失败,我无法弄清楚为什么我的以下方法会失败。我没有简单的解决方案来生成压力测试用例并进行比较。此外,也不会发表社论。所以,如果可能的话,我正在寻找一个人来指出我方法中的缺陷。 下面是对问题的详细描述,以及我迄今为止所做的尝试。 问题:有多个区域,您将根据每个区域的学生在各自区域中的排名获得分数。例如: 在上述数据

  • 问题内容: 如何将一个列表拆分为给定数量的列表,按顺序排列元素并将它们分配给子列表(因此不对列表进行分区)? 我想尽可能做到“不错”(使用Java 8功能或Guava或类似功能)。 示例列表: 应该分为3: 应该分成2个: 问题答案: 如果源列表支持有效的随机访问,则可以使用 例如

  • 在查看了这里、这里和文档之后,我仍然无法找到一种方法来根据所有这些条件从数据帧中选择行: 按给定列的值列表中给定的顺序返回行 举个例子,让我们 让 然后我想得到以下数据帧: 我怎样才能做到这一点?Zero的答案看起来很有希望,因为它是我发现的唯一一个保留原始索引的答案,但它不适用于重复。关于如何修改/推广它有什么想法吗?

  • 我有一个熊猫DataFrame,它已经按日期排序,但我需要序列化这个DataFrame到一个保持行顺序的命令python结构,以便我以后可以返回一个JSON。 我使用一个dict,其中我有一些键和值,我需要数据帧作为一个值。我用pd。但这并不能保持行的顺序。 我尝试使用OrderedDict,但无法用json序列化。转储()。我正在使用python 2.7。 这是datraframe数据,我试图将

  • 如何将列表拆分为给定数量的列表,按顺序获取元素并将它们分发到子列表(因此不对列表进行分区)? 我想尽可能“好”地做到这一点(使用 Java 8 功能或 Guava 或类似的东西。 示例列表: 应分为3部分: 应分为2部分: