我有一个pandas DataFrame,其中包含以下信息
id desc ammount
356 89 2521 ShouldBeFirst 0.00
356 89 2521 ShouldBeLast 19.00
356 89 2521 RandomValue 39.00
356 89 2521 RandomValue2 29.00
123 45 6789 RandomValue3 29.99
123 45 6789 ShouldBeFirst 0.00
123 45 6789 ShouldBeLast 99.00
123 45 6789 RandomValue3 39.00
123 45 6789 RandomValue2 19.00
我想要的是根据ID对DataFrame进行排序(这可以很容易地用df.sort_values('id', ascending=True)
完成),然后将该ID的第一行始终设置为ShouldBeFirst
,最后一行设置为ShouldBeLast
,如下所示:
id desc ammount
123 45 6789 ShouldBeFirst 0.00
123 45 6789 RandomValue2 19.00
123 45 6789 RandomValue3 29.99
123 45 6789 RandomValue3 39.00
123 45 6789 ShouldBeLast 99.00
356 89 2521 ShouldBeFirst 0.00
356 89 2521 RandomValue2 29.00
356 89 2521 RandomValue 39.00
356 89 2521 ShouldBeLast 19.00
我已经看到了几个关于如何自定义pandas DataFrame排序的线程,但它们都需要列出所有可能的值。我没有desc
列上的所有值。
3条答案
按热度按时间r3i60tvu1#
通过将已知值Map到预定义顺序来创建中间
desc_order
列,然后对 Dataframe 进行排序uxhixvfz2#
您可以使用自定义字典Map第一个和最后一个值,并将
fillna
用于其他值:或者使用
numpy.lexsort
:输出:
sd2nnvve3#
从这个开始......
将pandas导入为pd