python dataframe 排序按多列排序_python-如何使用自定义顺序按两列对DataFrame进行排序?...

我有一个pandas DataFrame,我需要按特定顺序在一个列中排序,而在另一列中升序.

两列都有重复的值.

看起来或多或少是这样的:

import pandas as pd

df = pd.DataFrame()

df[0] = pd.Series( [ 'a', 'aa', 'c' ] * 2 )

df[1] = pd.Series( [ 1, 2 ] * 3 )

df[2] = pd.Series( range(6) )

print( df )

0 1 2

0 a 1 0

1 aa 2 1

2 c 1 2

3 a 2 3

4 aa 1 4

5 c 2 5

现在,假设我需要按第0列和第1列进行排序,但无需按字母顺序排序:第0列应首先遵循以下顺序:

order = [ 'a', 'c', 'aa' ]

我怎么做?

我想这样排序:

print( sorted_df )

0 1 2

0 a 1 0

1 a 2 3

2 c 1 2

3 c 2 5

4 aa 1 4

5 aa 2 1

使用python 3.5.2,pandas 0.18.1

解决方法:

为此,您可以使用pandas的分类系列,它提供了单个排序顺序的功能:

df[0] = pd.Categorical(df[0], order)

print(df.sort_values([0, 1]))

0 1 2

0 a 1 0

3 a 2 3

2 c 1 2

5 c 2 5

4 aa 1 4

1 aa 2 1

标签:python,pandas,sorting,dataframe

来源: https://codeday.me/bug/20191011/1893307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值