我有一个 Dataframe df
,列为-A
[timeseries],B
[String]。
我想按升序对列A
的 Dataframe 进行排序(最早的日期在前);并且如果我们在B
的两个值之间具有针对特定日期的平局,则B
中的值的顺序应当基于它们在列B中的原始顺序。例如,对于日期01/01/2022,在B中存在两个值-XYZ
、ABC
。然后,在排序的 Dataframe 中,对于01/01/2022,第一个值应该是XYZ
,然后是ABC
。
我试过什么?
我尝试了几种方法来让它工作,最接近我想出的是以下-
import pandas as pd
df = pd.DataFrame({'A': ['2022-01-01', '2022-01-01', '2022-01-02', '2022-01-03'], 'B': ['lul', 'foo', 'baz', 'qux'], 'X': [1, 1, 2, 2]})
df = df.sort_values(by = ['A','B'], key=lambda x: pd.factorize(x)[0])
display(df)
这似乎对我的例子起作用,然而,当我在我真实的的 Dataframe 上尝试时,我看到日期的顺序不正确,即升序。
谢谢你的帮助
1条答案
按热度按时间p1tboqfb1#
通过在
sort_values
中使用kind='stable'
(或kind='mergesort'
)来使用稳定的排序方法:输出: