python - 如何仅对 Pandas 数据框中的某些列进行排序?

标签 python sorting pandas dataframe

有没有办法以用户定义的方式仅对列表的某些元素进行排序?

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5, 6), columns=['x','a','c','y','b','z'])

我想以前 3 列为 [x, y, z](按此顺序)的方式对 df 的列进行排序,并且其余列的放置位置无关紧要。

对于这个例子,我可以手动完成,但随着列表变大,使用更合适的方法会更方便。

我想过使用 l = df_r.columns.tolist() 但我不知道如何使用单个列表...

最佳答案

如果你知道你想要特定顺序的几列,只需在所有列和预先排序的列之间做一个设置差异,然后调用 reindex:

In [13]: cols = list('xacybz')

In [14]: df = DataFrame(randn(10, len(cols)), columns=cols)

In [15]: preordered = list('xyz')

In [16]: new_order = preordered + list(df.columns - preordered)

In [17]: new_order
Out[17]: ['x', 'y', 'z', 'a', 'b', 'c']

In [18]: df.reindex(columns=new_order)
Out[18]:
       x      y      z      a      b      c
0 -0.012  0.949 -0.276 -0.074 -0.054  0.541
1  0.994  1.059 -0.158  0.267 -0.590  0.263
2 -0.632 -0.015 -0.097 -1.904 -1.351 -1.105
3 -0.730 -0.684 -0.226  2.664 -0.385  1.727
4  0.891 -0.602  3.426  1.529  0.853 -0.451
5 -0.471  0.689  1.170 -0.635 -0.663  0.180
6  1.536  0.793  1.461  0.723 -0.795 -1.094
7  0.417  0.787  1.676  1.563  1.412  0.398
8  0.378  1.436 -0.024  0.293  0.655 -0.113
9 -0.159 -0.416 -1.526  0.633 -0.780 -0.613

preorder 的元素以什么顺序出现并不重要:

In [25]: shuffle(df.columns.values)

In [26]: df
Out[26]:
       b      a      z      c      x      y
0 -0.054 -0.074 -0.276  0.541 -0.012  0.949
1 -0.590  0.267 -0.158  0.263  0.994  1.059
2 -1.351 -1.904 -0.097 -1.105 -0.632 -0.015
3 -0.385  2.664 -0.226  1.727 -0.730 -0.684
4  0.853  1.529  3.426 -0.451  0.891 -0.602
5 -0.663 -0.635  1.170  0.180 -0.471  0.689
6 -0.795  0.723  1.461 -1.094  1.536  0.793
7  1.412  1.563  1.676  0.398  0.417  0.787
8  0.655  0.293 -0.024 -0.113  0.378  1.436
9 -0.780  0.633 -1.526 -0.613 -0.159 -0.416

In [27]: new_order = preordered + list(df.columns - preordered)

In [28]: new_order
Out[28]: ['x', 'y', 'z', 'a', 'b', 'c']

关于python - 如何仅对 Pandas 数据框中的某些列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579871/

相关文章:

python - 如何使用互谱密度计算两个相关信号的相移

sorting - Elasticsearch 按字段存在排序

python - 如何将样条曲线拟合转换为分段函数?

python - 从 popen 中检索环境变量

javascript - sort() 按第一个数字而不是整个数字对数据进行排序

pandas - 从 pandas 导出到没有行名称(索引)的_excel?

python,对数字/字符串列表进行排序(将列表元素转换为序数值)

python - 使用固定宽度拆分字符串类型的 Pandas 列(类似于具有固定宽度的 Excel 文本到列功能)

Python 请求 : How to get value of Blank Hidden Input

java - JTable 日期过滤器未按应有的方式工作