首先按照元音的单个字符名称对列进行排序

时间:2018-03-23 05:15:06

标签: python pandas sorting

考虑数据框df

df = pd.DataFrame(np.arange(25).reshape(5, 5), columns=list('CBESA'))
df

    C   B   E   S   A
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24

我想重新排列列,使得元音在辅音之前出现,否则按字母顺序排列。

我可以使用sort_index

按字母顺序对列进行排序
df.sort_index(1)

    A   B   C   E   S
0   4   1   0   2   3
1   9   6   5   7   8
2  14  11  10  12  13
3  19  16  15  17  18
4  24  21  20  22  23

但是这会使'E'失灵 我可以得到我想要的东西"手动"

df[list('AEBCS')]

    A   E   B   C   S
0   4   2   1   0   3
1   9   7   6   5   8
2  14  12  11  10  13
3  19  17  16  15  18
4  24  22  21  20  23

如果我不知道确切的字母,我该怎么做?我知道它们是单字符ascii大写字母。

1 个答案:

答案 0 :(得分:6)

您需要sorted + reindex

df.reindex(columns=[
    x[1] for x in sorted(zip(~df.columns.isin(list('AEIOU')), df.columns))
])

sorted将对多个谓词进行排序,如果您将其传递给使用zip生成的元组的列表/容器。

或者,采用piR的建议并使用lambda进行排序:

df.reindex(
    columns=sorted(df.columns, key=lambda x: (x not in 'AEIOU', x))
)

    A   E   B   C   S
0   4   2   1   0   3
1   9   7   6   5   8
2  14  12  11  10  13
3  19  17  16  15  18
4  24  22  21  20  23