Python对组间而非组内进行排序(重新排列分组行,但在groupby之前保持原始行顺序)
我希望根据列对行组进行排序(在我的示例中,“Group”是要分组的列,然后对组进行排序(按组行顺序进行维护)。我无法按索引排序,因为由于前面的操作,索引故意无序Python对组间而非组内进行排序(重新排列分组行,但在groupby之前保持原始行顺序),python,pandas,Python,Pandas,我希望根据列对行组进行排序(在我的示例中,“Group”是要分组的列,然后对组进行排序(按组行顺序进行维护)。我无法按索引排序,因为由于前面的操作,索引故意无序 df = pd.DataFrame({ 'Group':[5,5,5,9,9,777,777,1,2,2], 'V1':['a','b','a',3,6,1,None,10,3,None], 'V2':['blah','blah','blah','dog','cat','cat','na','first',
df = pd.DataFrame({
'Group':[5,5,5,9,9,777,777,1,2,2],
'V1':['a','b','a',3,6,1,None,10,3,None],
'V2':['blah','blah','blah','dog','cat','cat','na','first','last','nada'],
'V3':[1,2,3,4,5,5,4,3,2,1,]
})
希望它看起来像这样:
我试过各种方法,比如
df.groupby(['Group'])['Group']).aggregate({'min grp':'min'}).sort_values(by=['min grp'], ascending=True)
如果有帮助,原始的
df
是通过pd.concat(数据帧列表)创建的
之后,当我按组对它们进行排序时,它还会根据索引对组内的行进行排序,这对我的特定问题不起作用。如果我正确理解了您的问题,您不希望按分组,而是按列的值进行排序。组
。您可以使用
您需要将
sort\u值
与选项kind='mergesort'
一起使用
kind : {‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’
Choice of sorting algorithm. See also ndarray.np.sort for more
information. mergesort is the only stable algorithm. For DataFrames,
this option is only applied when sorting on a single column or label.
当两个键相等的相同元素以与输入中相同的顺序出现时,排序算法称为stable
。稳定排序列表包括:插入排序、合并排序、冒泡排序、tim排序、计数排序
因此,您需要:
df = df.sort_values('Group', kind='mergesort')
在不使用kind
调用sort\u值时,它是默认的“快速排序”,并且quicksort
不稳定
df = df.sort_values('Group', kind='mergesort')