gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:10:28 29 4
gpt4 key购买 nike

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

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com