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