根据熊猫中的另一列对唯一值进行排序

时间:2019-12-29 19:35:28

标签: python pandas

我正在尝试使用group by对pandas数据框中的唯一值进行排序;

df = pd.DataFrame({
...     'gr1': ['A', 'A', 'A','A', 'B', 'B', 'B','B'],
        'gr1_sum' : [100,100 ,100,100, 200,200,200,200],
        'rank_gr1': [2, 2, 2, 2, 1, 1, 1, 1],

...     'gr2': ['a1', 'a1', 'a2','a2',  'b1', 'b1', 'b2','b2'],
        'gr2_sum' : [30,30 ,40,40, 20,20,10,10]})

#df.sort_values(by=['col2'],inplace = True)    
rank_gr1_sort = pd.unique(df['rank_gr1'].values)
rank_gr2_sort = df.sort_values(['rank_gr1']).groupby(['gr1','gr2'])['gr2_sum'].unique()

rank_gr1_sort
array([2, 1], dtype=int64)

rank_gr2_sort
gr1  gr2
A    a1     [30]
     a2     [40]
B    b1     [20]
     b2     [10]
Name: gr2_sum, dtype: object

我需要的是这个

   gr1  gr2
    B    b1     [20]
         b2     [10]
    A    a1     [30]
         a2     [40]
    Name: gr2_sum, dtype: object

我如何实现此输出?

谢谢!

pandas groupby sort within groups

Pandas Number of Unique Values and sort by the number of unique

1 个答案:

答案 0 :(得分:2)

在分组依据下传递sort=False

来自文档:

  

sort:bool,默认为True   排序组键。关闭此功能可获得更好的性能。请注意,这不会影响每个组中观察的顺序。 Groupby保留每个组中行的顺序。

rank_gr2_sort = df.sort_values(['rank_gr1']).groupby(
                       ['gr1','gr2'],sort=False)['gr2_sum'].unique()

gr1  gr2
B    b1     [20]
     b2     [10]
A    a1     [30]
     a2     [40]
Name: gr2_sum, dtype: object