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

将行按列在列中无序排列

司空鸿禧
2023-03-14

我有下面的dataframe示例。

    c1     c2
0   1       a
1   2       b
2   3       c
3   4       d
4   5       e

给定一个模板c1=[3,2,5,4,1],我想根据列c1的新顺序更改行的顺序,因此它看起来像:

    c1     c2
0    3      c
1    2      b
2    5      e
3    4      d
4    1      a

我找到了下面的线程,但是洗牌是随机的。Cmmiw。

洗牌数据帧行

共有2个答案

郎鸿雪
2023-03-14

您可以使用所需的顺序指定的列创建一个数据帧,然后合并
这种方法的一个优点是它可以优雅地处理df.c1或列表c1中的重复项。如果不需要复制品,则在重新订购之前必须小心处理。

d1 = pd.DataFrame({'c1': c1})

d1.merge(df)

   c1 c2
0   3  c
1   2  b
2   5  e
3   4  d
4   1  a

这不太可靠,但如果df.c1为:

  • 已排序
  • 一对一映射
df.iloc[df.c1.searchsorted(c1)]

   c1 c2
2   3  c
1   2  b
4   5  e
3   4  d
0   1  a

段恩
2023-03-14

如果值在列表和c1列中是唯一的,请使用reindex

df = df.set_index('c1').reindex(c1).reset_index()
print (df)
   c1 c2
0   3  c
1   2  b
2   5  e
3   4  d
4   1  a

使用列表和列中的重复项的一般解决方案:

c1 = [3, 2, 5, 4, 1, 3, 2, 3]

#create df from list 
list_df = pd.DataFrame({'c1':c1})
print (list_df)
   c1
0   3
1   2
2   5
3   4
4   1
5   3
6   2
7   3

#helper column for count duplicates values
df['g'] = df.groupby('c1').cumcount()
list_df['g'] = list_df.groupby('c1').cumcount()

#merge together, create index from column and remove g column
df = list_df.merge(df).drop('g', axis=1)
print (df)
   c1 c2
0   3  c
1   2  b
2   5  e
3   4  d
4   1  a
5   3  c
 类似资料:
  • 问题内容: 它有点难以解释。跳到示例可能会更容易。 一个表有一个ID和四列,每列允许为空。 有x行数。(通常小于4)并且在整个列中最多只能使用4个不同的值。 我希望返回最多4行,其中结果集中的每一行基本上都是一列值,其中该值是从顶部保留Col编号开始从右向左选择的。如果另一行的值不是列唯一,则将其移至下一个可用列。 例子: 如果我有: 我想回来 和 给 和 给 谢谢!当存在非唯一列并且值之间存在空

  • 问题内容: 我有一个数据库 我怎样才能选择该猫排序,?那是 问题答案: 这应该做…除了名称的双破折号“-”以外… 按第一个案例的顺序/何时将所有属于最高级别的项目放在第一层,或者将所有项目放在第一层的ID的第二层。因此,如果您有超过1000个条目,尝试使用提供的父* 1000个示例hack就不会成为问题。当父ID = 0时,第二个案例/时间将强制进入其分组列表的TOP及其下的所有子条目,但在下一个

  • 我用的是拉威尔的背包,积垢舱。 如何将orderby()用于多列? 例子: 我看到src和orderby只接受一个参数。 有什么建议吗?

  • 我的教授介绍了如何使用ArrayList创建Max Heap类。然后他让我们写一个maxHeapSort方法。我几乎成功地将堆按降序排序,但我假设排序应该按升序。现在我使用一个最大堆为[11,5,8,3,4,1]的ArrayList,它排序为[11,8,5,3,4,1]。 这是我的maxHeapSort代码: 下面是我的教授给出的heapifyDown方法: 这是我的测试代码:

  • 问题内容: 如何按降序对列表进行排序? 问题答案: 在一行中,使用: 将函数传递给: