根据列名对熊猫数据框中的列进行排序

2025-02-20 09:22:00
admin
原创
31
摘要:问题描述:我有一个dataframe包含 200 多个列的文件。问题是,它们的生成顺序是['Q1.3','Q6.1','Q1.2','Q1.1',......] 我需要按如下方式对列进行排序:['Q1.1','Q1.2','Q1.3',.....'Q6.1',......] 有没有什么方法可以用 Python...

问题描述:

我有一个dataframe包含 200 多个列的文件。问题是,它们的生成顺序是

['Q1.3','Q6.1','Q1.2','Q1.1',......]

我需要按如下方式对列进行排序:

['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]

有没有什么方法可以用 Python 来实现这一点?


解决方案 1:

df = df.reindex(sorted(df.columns), axis=1)

这假设对列名进行排序将得到您想要的顺序。如果您的列名不按字典顺序排序(例如,如果您希望列 Q10.3 出现在 Q9.1 之后),则需要进行不同的排序,但这与 pandas 无关。

解决方案 2:

您还可以做得更简洁:

df.sort_index(axis=1)

确保将结果分配回去:

df = df.sort_index(axis=1)

或者,就地执行:

df.sort_index(axis=1, inplace=True)

解决方案 3:

你可以这样做:

df[已排序(df.列)]

编辑:更短的是

df[sorted(df)]

解决方案 4:

对于多列,您可以按您想要的顺序排列:

#['A', 'B', 'C'] <-this is your columns order
df = df[['C', 'B', 'A']]

此示例显示对列进行排序和切片:

d = {'col1':[1, 2, 3], 'col2':[4, 5, 6], 'col3':[7, 8, 9], 'col4':[17, 18, 19]}
df = pandas.DataFrame(d)

您将获得:

col1  col2  col3  col4
 1     4     7    17
 2     5     8    18
 3     6     9    19

然后执行以下操作:

df = df[['col3', 'col2', 'col1']]

导致:

col3  col2  col1
7     4     1
8     5     2
9     6     3     

解决方案 5:

Tweet 的答案可以传递给上面的 BrenBarn 的答案

data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)

对于你的例子,可以说:

vals = randint(low=16, high=80, size=25).reshape(5,5)
cols = ['Q1.3', 'Q6.1', 'Q1.2', 'Q9.1', 'Q10.2']
data = DataFrame(vals, columns = cols)

您将获得:

data

    Q1.3    Q6.1    Q1.2    Q9.1    Q10.2
0   73      29      63      51      72
1   61      29      32      68      57
2   36      49      76      18      37
3   63      61      51      30      31
4   36      66      71      24      77

然后执行以下操作:

data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)

导致:

data


     Q1.2    Q1.3    Q6.1    Q9.1    Q10.2
0    2       0       1       3       4
1    7       5       6       8       9
2    2       0       1       3       4
3    2       0       1       3       4
4    2       0       1       3       4

解决方案 6:

如果您需要任意序列而不是排序序列,您可以执行以下操作:

sequence = ['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
your_dataframe = your_dataframe.reindex(columns=sequence)

我在 2.7.10 中测试了这一点并且它对我有用。

解决方案 7:

不要忘记在 Wes 的答案中添加“inplace=True”或将结果设置为新的 DataFrame。

df.sort_index(axis=1, inplace=True)

解决方案 8:

最快的方法是:

df.sort_index(axis=1)

请注意,这将创建一个新实例。因此,您需要将结果存储在一个新变量中:

sortedDf=df.sort_index(axis=1)

解决方案 9:

方法sortsorted函数允许您提供自定义函数来提取用于比较的键:

>>> ls = ['Q1.3', 'Q6.1', 'Q1.2']
>>> sorted(ls, key=lambda x: float(x[1:]))
['Q1.2', 'Q1.3', 'Q6.1']

解决方案 10:

一个用例是,您使用某些前缀命名了(某些)列,并且希望使用这些前缀对这些列进行排序,并且按照特定的顺序(非字母顺序)进行排序。

例如,您可能以 开始所有功能Ft_,以 开始标签Lbl_,等等,并且您希望首先获取所有未加前缀的列,然后获取所有功能,最后获取标签。您可以使用以下函数执行此操作(我将指出使用sum减少列表可能存在的效率问题,但除非您拥有大量列(而我没有),否则这不是问题):

def sortedcols(df, groups = ['Ft_', 'Lbl_'] ):
    return df[ sum([list(filter(re.compile(r).search, list(df.columns).copy())) for r in (lambda l: ['^(?!(%s))' % '|'.join(l)] + ['^%s' % i  for i in l ] )(groups)   ], [])  ]

解决方案 11:

print df.sort_index(by='Frequency',ascending=False)

其中 by 是列的名称,如果您想根据列对数据集进行排序

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1343  
  信创产业的蓬勃发展推动着各行业数字化转型加速,数据库迁移作为其中关键一环,面临诸多挑战。信创数据库迁移旨在将传统数据库平稳过渡到信创环境,以满足自主可控、安全可靠的需求。这一过程涉及技术、业务等多方面因素,稍有不慎就可能出现各种问题,影响业务的正常运行。深入探讨信创数据库迁移过程中的常见问题及解决方案,对于保障迁移工作...
2027年信创国产化   41  
  随着信息技术的飞速发展,信创国产化成为了国家战略的重要组成部分。国产化信创产品名录涵盖了众多领域,其在各个关键应用场景中发挥着重要作用。而信创国产化操作系统作为其中的核心环节,具备五大核心优势,为我国信息技术产业的自主可控发展提供了坚实支撑。关键应用场景之办公领域在办公领域,国产化信创产品有着广泛且深入的应用。如今,越...
国产信创系统   37  
  随着信息技术的飞速发展,信创国产化操作系统在政府部门的推广应用具有重要的战略意义。它不仅关乎国家信息安全,更是推动国内信息技术产业自主创新、实现科技自立自强的关键举措。在当前复杂的国际形势下,政府部门积极推广信创国产化操作系统,对于保障国家政务信息的安全稳定运行,提升信息技术的自主可控能力,具有不可替代的重要作用。推广...
信创产品有哪些   28  
  在企业数字化转型的进程中,信创数据库解决方案的选择至关重要。它不仅关乎企业数据的安全存储与管理,更影响着企业业务的稳定运行与未来发展。合适的信创数据库能够助力企业在复杂多变的市场环境中提升竞争力,保障数据主权与安全。然而,面对市场上众多的信创数据库产品和解决方案,企业往往感到困惑,不知如何做出正确的选择。接下来,我们将...
信创电脑   24  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用