Python 熊猫的两次分类

Python 熊猫的两次分类,python,pandas,sorting,Python,Pandas,Sorting,我有一个数据框a,它有三列:“id”、“value”和“date”。我在做一个groupby id,发现了一个奇怪的现象:如果我对具有给定id的行进行两次连续排序,首先是按值排序,然后是按日期排序,操作顺序会影响行的顺序。请注意索引为42915和42916的行的顺序: A.sort_values('value').sort_values('date')[A.sort_values('value').sort_values('date')['id'] == '0001249666'] id v

我有一个数据框a,它有三列:“id”、“value”和“date”。我在做一个groupby id,发现了一个奇怪的现象:如果我对具有给定id的行进行两次连续排序,首先是按值排序,然后是按日期排序,操作顺序会影响行的顺序。请注意索引为42915和42916的行的顺序:

A.sort_values('value').sort_values('date')[A.sort_values('value').sort_values('date')['id'] == '0001249666']

id  value   date
42913   0001249666  113845.0    20130408
42914   0001249666  114597.0    20130430
42916   0001249666  125972.0    20140414
42915   0001249666  125971.0    20140414
42917   0001249666  136154.0    20150410
42918   0001249666  145551.0    20160407
42919   0001249666  152911.0    20170413

A[A['id'] == '0001249666'].sort_values('value').sort_values('date')

id  value   date
42913   0001249666  113845.0    20130408
42914   0001249666  114597.0    20130430
42915   0001249666  125971.0    20140414
42916   0001249666  125972.0    20140414
42917   0001249666  136154.0    20150410
42918   0001249666  145551.0    20160407
42919   0001249666  152911.0    20170413
但是,如果我使用带有两个参数的.sort_值,则顺序并不重要

A.sort_values(['date','value'])[A.sort_values(['date','value'])['id'] == '0001249666']

id  value   date
42913   0001249666  113845.0    20130408
42914   0001249666  114597.0    20130430
42915   0001249666  125971.0    20140414
42916   0001249666  125972.0    20140414
42917   0001249666  136154.0    20150410
42918   0001249666  145551.0    20160407
42919   0001249666  152911.0    20170413

a[a['id'] == '0001249666'].sort_values(['date','value'])

id  value   date
42913   0001249666  113845.0    20130408
42914   0001249666  114597.0    20130430
42915   0001249666  125971.0    20140414
42916   0001249666  125972.0    20140414
42917   0001249666  136154.0    20150410
42918   0001249666  145551.0    20160407
42919   0001249666  152911.0    20170413

现在我知道我所做的并不是做我想做的事情的最聪明的方式,但我真的很想了解是什么可以解释这种行为?当我不理解这种行为时,我会隐含地假设什么。

问题是排序算法不是这样,因此具有相同排序值的行(当您有多个具有相同
日期的行时发生的情况)可能会相对于其原始相对顺序被打乱。这意味着,如果两次调用sort-your-data-frame,第一次排序将不会产生任何(可预测的)效果,因为第二次排序将仅根据其自身的标准进行排序。支持多种排序算法;正如文档中所述,默认情况下是快速排序,但是如果需要,您可以传递
kind='mergesort'
进行稳定排序


显然,当您传递两列进行排序时,排序算法会同时考虑这两个列,因此排序将按预期进行。

好的,这正是我想要的答案。现在我知道该读什么文档了。。。非常感谢。