python去重复排序_python – pandas DataFrame按重复排序行

您可以使用

cumcount计算A列中的重复项,然后使用A计算

sort_values(不需要样本,实际数据可能很重要),然后使用C.最后在

drop删除C列:

df['C'] = df.groupby('A')['A'].cumcount()

df.sort_values(by=['C', 'A'], inplace=True)

print (df)

A B C

0 r1 0 0

2 r2 2 0

4 r3 4 0

1 r1 1 1

3 r2 3 1

5 r3 5 1

df.drop('C', axis=1, inplace=True)

print (df)

A B

0 r1 0

2 r2 2

4 r3 4

1 r1 1

3 r2 3

5 r3 5

时序:

小df(len(df)= 6)

In [26]: %timeit (jez(df))

1000 loops, best of 3: 2 ms per loop

In [27]: %timeit (boud(df1))

100 loops, best of 3: 2.52 ms per loop

大df(len(df)= 6000)

In [23]: %timeit (jez(df))

100 loops, best of 3: 3.44 ms per loop

In [28]: %timeit (boud(df1))

100 loops, best of 3: 2.52 ms per loop

时间码:

df = pd.concat([df]*1000).reset_index(drop=True)

df1 = df.copy()

def jez(df):

df['C'] = df.groupby('A')['A'].cumcount()

df.sort_values(by=['C', 'A'], inplace=True)

df.drop('C', axis=1, inplace=True)

return (df)

def boud(df):

df['C'] = df.groupby('A')['B'].rank()

df = df.sort_values(['C', 'A'])

df.drop('C', axis=1, inplace=True)

return (df)

100 loops, best of 3: 4.29 ms per loop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值