Python 如何使用pandas对组内的行进行排序(降序)
我有一个数据帧,如下所示:Python 如何使用pandas对组内的行进行排序(降序),python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据帧,如下所示: col1=[1,1,1,2,2,2,3,3,3] col2=['a','b','c','d','e','f','g','h','i'] col3=[1,2,3,2,3,1,3,1,2] d={ "col1":col1, "col2":col2, "col3":col3 } dummy= pd.DataFrame(d) 因此,数据框如下所示: 我想根据col1对所有值进行分组,并根据
col1=[1,1,1,2,2,2,3,3,3]
col2=['a','b','c','d','e','f','g','h','i']
col3=[1,2,3,2,3,1,3,1,2]
d={
"col1":col1,
"col2":col2,
"col3":col3
}
dummy= pd.DataFrame(d)
因此,数据框如下所示:
我想根据col1对所有值进行分组,并根据col3的排序(递减ord)得到col2的值,即,我希望最终结果如下:
col2=[c,b,a,e,d,f,g,i,h]
我已经尝试了以下方法,它们以升序排列在col2中:
res=dummy.groupby(['col1','col3'])['col2'].apply(sorted).reset_index()
但是上面的结果是[[a]、[b]、[c]…]。我不希望每个元素本身都是一个列表。我如何颠倒顺序?任何帮助都将不胜感激。谢谢。此处无需使用groupby,对两列的值进行简单的排序即可:
dummy.sort_values(['col1', 'col3'], ascending=[True, False])
col1 col2 col3
2 1 c 3
1 1 b 2
0 1 a 1
4 2 e 3
3 2 d 2
5 2 f 1
6 3 g 3
8 3 i 2
7 3 h 1
“col2”的顺序正确,您现在只需将其作为列表返回:
col2_list = (dummy.sort_values(['col1', 'col3'], ascending=[True, False])
.get('col2')
.tolist())
col2_list
# ['c', 'b', 'a', 'e', 'd', 'f', 'g', 'i', 'h']
针对评论中的请求: 现在我想把这些col2值和col1值结合起来,可以吗 直接从伪df中获取col1,并对col2进行排序以创建新的 数据帧 输出应该是(例如):1[c,b,a]2[e,d,f] 在这里,我们可以使用
Groupby.agg
在前面的解决方案的基础上列出数据:
(dummy.sort_values(['col1', 'col3'], ascending=[True, False])
.groupby('col1', sort=False)['col2']
.agg(list)
.reset_index())
col1 col2
0 1 [c, b, a]
1 2 [e, d, f]
2 3 [g, i, h]
尝试:
印刷品:
0 c
1 b
2 a
3 e
4 d
5 f
6 g
7 i
8 h
要以列表形式打印,请使用
series.tolist()
非常感谢您的帮助。我只是有一个查询,在得到col2的排序值之后,我可以直接将这些值与col1关联吗?意思是,现在我想将这些col2值与col1值结合起来,我可以直接从伪df中获取col1并对col2进行排序以创建新的数据帧吗?@Aditya我不懂,抱歉。您的意思是要获得与排序的col2值对应的col1值吗?输出应该是什么样子,元组列表?@ca95输出应该是(例如):1[c,b,a]2[e,d,f]。。。
0 c
1 b
2 a
3 e
4 d
5 f
6 g
7 i
8 h