DataFrames 列根据列表重新排列 - DataFrames 有不同的列

问题描述

我的问题摘要

  • 我有很多 DataFrames,所有的列都有相同的 POOL(7 列,例如 COLUMN1:COLUMN7),但有时会丢失一个或多个列(即一个 DataFrame 可能有 COLUMN1:COLUMN3 + COLUMN6:COLUMN7 ,因此缺少第 4 和第 5 列)。

  • 每个 DataFrame 每次都有以不同顺序排列的列(即 df1 有它的顺序,df2 有另一个顺序,df3 另一个顺序等等......)。

  • 我想根据以下列表排列每个 DataFrame 中的列 用作基准的列(在本例中为列列表 从 1 到 7)。

  • 期望的结果是所有数据帧都具有相同的 基于此列表的列顺序,如果列缺少顺序 应该保留(即如果第 4 列和第 5 列缺失,则 列应为:COL1、COL2、COL3、COL6、COL7)。

更详细的描述:

我的代码中有几个 DataFrames,它们是通过清理一些数据集生成的。这些 DataFrame 中的每一个都有不同数量的列,并且按不同的顺序排列,但这些列仅限于以下列表:'id','title','type','category','secondary category','date','description'。因此,从此列表中,列最多可以是 7。示例:

DataFrame1 'id','description','secondary category'

DataFrame2 'id','date'

DataFrame3 'id','title'

期望的输出

我想根据初始列表 'id','description' 对列进行排序,即使列数有所不同。 从上面的例子中,DataFrames 应该变成:

DataFrame1 'id','description'

DataFrame2 'id','description'

DataFrame3 'id','description'

有没有办法,例如循环,以这种方式排列列?

解决方法

您可以使用列表推导对列的顺序进行排序,并使用 reindex 设置正确的顺序:

desired_order = ['id','title','type','category','secondary category','date','description']

df = df.reindex([i for i in desired_order if i in df.columns],axis=1)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...