我有一个按以下顺序排序的数据集:
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)
使用
groupby.cumcount
形成用于排序的辅助键:
out = (df.assign(key=lambda x: x.groupby(['col1', 'col2']).cumcount())
.sort_values(by=['col1', 'key', 'col2'])
.drop(columns='key')
)