根据Pandas中的列表对多列进行排序

2024-05-15 23:12:10 发布

您现在位置:Python中文网/ 问答频道 /正文

感谢您提供有关如何根据pandas中的倍数列表对给定的多列进行排序的任何提示,如下所示

import pandas as pd
sort_a=['a','d','e']
sort_b=['s1','s3','s6']
sort_c=['t1','t2','t3']
df=pd.DataFrame(zip(['a', 'e', 'd','a','a','d','e'], ['s3', 's1', 's6','s6','s3','s3','s1'], ['t3', 't2', 't1','t2','t2','t3','t3']),columns=["a", "b", "c"])

使用排序列,例如,acd

这个想法有点像sort

df.sort(['a', 'c', 'd'], ascending = [sort_a, sort_c, sort_b])

预期产量

a   b   c
a   s3  t2
a   s3  t3
a   s6  t2
d   s3  t3
d   s6  t1
e   s1  t2
e   s1  t3

Tags: importpandasdf列表s3排序assort
2条回答

一个选项是为每个列创建类别并进行排序:

categories = {col : pd.CategoricalDtype(categories=cat, ordered=True) 
              for col, cat 
              in zip(df.columns, [sort_a, sort_b, sort_c])}

df.astype(categories).sort_values([*df.columns])

   a   b   c
0  a  s3  t3
2  d  s6  t1
1  e  s1  t2

虽然与引用列表进行排序没有直接关系,但发布此操作时的关键问题是,我想对其中包含string的列进行排序

使用熊猫的排序_值>;=1.1.0

使用DataFrame.sort_值中的新键参数,自pandas 1.1.0以来,我们可以直接对列进行排序,而无需使用natsort.natsort_keygen将其设置为索引:

from natsort import natsort_keygen
df=df.sort_values(
    by=['a','b','c'],
    key=natsort_keygen()
)

输出:

   a   b   c
4  a  s3  t2
0  a  s3  t3
3  a  s6  t2
5  d  s3  t3
2  d  s6  t1
1  e  s1  t2
6  e  s1  t3

相关问题 更多 >