我正在尝试使用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
答案 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