gpt4 book ai didi

python - 在 Pandas 中排序两次

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:44 25 4
gpt4 key购买 nike

我有一个包含三列的数据框 A:“id”、“value”和“date”。我正在按 id 进行 groupby,并注意到一些奇怪的事情:如果我对具有给定 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_values,顺序无关紧要。

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

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

最佳答案

问题是排序算法不是stable ,因此具有相同排序值的行(当您有多个具有相同 date 的行时会发生这种情况)可能会相对于它们的原始相对顺序被打乱。这意味着,如果您对数据框调用排序两次,第一次排序将不会产生任何(可预测的)效果,因为第二次排序只会根据其自身的标准进行排序。 sort_values支持多种排序算法;如文档所述,默认为快速排序,但如果需要,您可以通过 kind='mergesort' 进行稳定排序。

显然,当您传递两列作为排序依据时,排序算法会同时考虑它们,因此排序会按预期进行。

关于python - 在 Pandas 中排序两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49110120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com