如何在groupby之后按重复顺序对python pandas数据框进行排序?

问题描述 投票:0回答:1

我有一个按以下顺序排序的数据集:

col1 col2 col3
a 1 r
a 1 s
a 2 t
a 2
a 3 v
a 3 w
b 4 x
b 4 y
b 5 z
b 5 q
b 6 w
b 6 e

我希望它按以下顺序排序:

col1 col2 col3
a 1 r
a 2 t
a 3 v
a 1 s
a 2
a 3 w
b 4 x
b 5 z
b 6 w
b 4 y
b 5 q
b 6 e

我希望 col2 处于重复的方式,例如,对于 col1 'a' 值,它应该是 1,2,3,4,然后再次是 1,2,3,4,而不是 1,1,2,2 ,3,3,4,4。 我使用了以下代码,但它不起作用:

import pandas as pd

# Creating the DataFrame
data = {
    'col1': ['a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b'],
    'col2': [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6],
    'col3': ['r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'q', 'w', 'e']
}

df = pd.DataFrame(data)

# Sort by col1, then reorder col2 within each group
df_sorted = df.sort_values(by=['col1', 'col2']).reset_index(drop=True)

df_sorted = df_sorted.groupby('col1', group_keys=False).apply(lambda x: x.sort_values('col2'))

# Display the sorted dataframe
print(df_sorted)

python pandas dataframe
1个回答
0
投票

使用

groupby.cumcount
形成用于排序的辅助键:

out = (df.assign(key=lambda x: x.groupby(['col1', 'col2']).cumcount())
         .sort_values(by=['col1', 'key', 'col2'])
         .drop(columns='key')
      )
© www.soinside.com 2019 - 2024. All rights reserved.