首页 > 解决方案 > 对 DataFrame 进行排序,将重复项移至末尾

问题描述

我有一个包含 number 的列表[1,1,2,2,3,3]。如何将此列表排序到[1,2,3,1,2,3]

让我详细说明它的用途。我有一个熊猫数据框

columnA columnB columnC
A       a        1       
A       a        1
A       b        2
A       b        2
B       a        1
B       a        1
B       b        2
B       b        2

我想让它重新排序,如下所示:

columnA columnB columnC
A       a        1       
A       b        2
A       a        1
A       b        2
B       a        1
B       b        2
B       a        1
B       b        2

我试过 sort_values 函数,但它似乎不起作用。

标签: pythonpandasdataframesorting

解决方案


这是一个GroupBy.cumcount用于计算重复值并将此计数用作将重复项移至末尾的键的解决方案:

import pandas as pd

df = pd.read_csv('dataduplicates.csv')
df['duplicate_key'] = df.groupby('columnC').cumcount()
df.sort_values(['duplicate_key', 'columnC'], inplace=True)

print(df)
#   columnA columnB  columnC  duplicate_key
# 0       A       a        1              0
# 2       A       b        2              0
# 1       A       a        1              1
# 3       A       b        2              1
# 4       B       a        1              2
# 6       B       b        2              2
# 5       B       a        1              3
# 7       B       b        2              3

推荐阅读