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

按给定列表的顺序重复选择dataframe的行,并保留原始索引

党星鹏
2023-03-14

在查看了这里、这里和文档之后,我仍然无法找到一种方法来根据所有这些条件从数据帧中选择行:

  • 按给定列的值列表中给定的顺序返回行

举个例子,让我们

df = pd.DataFrame({'A': [5, 6, 3, 4], 'B': [1, 2, 3, 5]})
df

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

list_of_values = [3, 4, 6, 4, 3, 8]

然后我想得到以下数据帧:

     A   B
2    3   3
3    4   5
1    6   2
3    4   5
2    3   3

我怎样才能做到这一点?Zero的答案看起来很有希望,因为它是我发现的唯一一个保留原始索引的答案,但它不适用于重复。关于如何修改/推广它有什么想法吗?

共有2个答案

慕容兴贤
2023-03-14

这里有一种使用merge的方法:

list_df = pd.DataFrame({"A": list_of_values, "order": range(len(list_of_values))})

pd.merge(list_df, df, on="A").sort_values("order").drop("order", axis=1)

输出为:

   A  B
0  3  3
2  4  5
4  6  2
3  4  5
1  3  3
蔚和风
2023-03-14

我们必须先将索引指定为一列来保留它,这样我们才能在编码后设置索引

list_of_values = [3, 4, 6, 4, 3, 8]
df2 = pd.DataFrame({'A': list_of_values, 'order': range(len(list_of_values))})

dfn = (
    df.assign(idx=df.index)
    .merge(df2, on='A')
    .sort_values('order')
    .set_index('idx')
    .drop('order', axis=1)
)
     A  B
idx      
2    3  3
3    4  5
1    6  2
3    4  5
2    3  3

如果要删除索引名(idx),请使用rename_axis

dfn = dfn.rename_axis(None)

   A  B
2  3  3
3  4  5
1  6  2
3  4  5
2  3  3

 类似资料:
  • 问题内容: 我有类似的东西 如果我只是这样做,它将以ID升序返回行。有没有一种方法可以按照IN语句中给出的顺序取回行? 问题答案: 您应该使用“ ORDER BY FIELD”。因此,例如:

  • 问题内容: 在使用Python Pandas进行读写时,是否可以保留csv文件中列的顺序?例如,在此代码中 输出文件可能会有所不同,因为未保留列。 问题答案: 当前版本的Pandas(‘0.11.0’)中似乎存在一个错误,这意味着Matti John的答案将不起作用。如果您指定要写入文件的列,则它们将按字母顺序书写,而只是根据cols中的列表重新标记。例如,此代码: 导致以下(错误)输出: 您可以

  • 问题内容: 我认为使用某种顺序才有意义。我想做的是在视图中包括该子句,以便该视图上的所有s都可以忽略它。但是,我担心该订单不一定会延续到,因为它没有指定订单。 是否存在一种情况,即视图指定的顺序不会反映在该视图上的select结果中(该视图中的order by子句除外)? 问题答案: 您不能指望没有显式子句的任何查询中的行顺序。如果查询有序视图,但没有包括子句,则如果它们的顺序正确,请感到惊喜,并

  • 这个问题可能非常愚蠢,但我不知道该怎么做 有一个带有N列的。我需要选择一些列,按列的索引引用,然后将所有值转换为数字,并在我的 我已经通过列名引用(比如完成了这项工作,但仍然坚持使用索引(比如 在这种情况下,对列引用的正确方法是什么?(python 2.7)

  • 本文向大家介绍python列表list保留顺序去重的实例,包括了python列表list保留顺序去重的实例的使用技巧和注意事项,需要的朋友参考一下 常规通过迭代或set方法,都无法保证去重后的顺序问题 如下,我们可以通过列表的索引功能,对set结果进行序列化 以上这篇python列表list保留顺序去重的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。